如何解决kswapd0高CPU占用问题

时间:2021-06-10 00:43:16

故障现象

公司某公有云上一台临时测试主机突然无法正常登录,从控制台查看监控图像发现已经无法正常显示即时信息,将监控时间范围调整7天内,发现如下图信息:

如何解决kswapd0高CPU占用问题

如何解决kswapd0高CPU占用问题

查看系统进程信息:

如何解决kswapd0高CPU占用问题

故障原因

kswapd0,管理虚拟内存并且可能由于过于频繁地将进程移动到SWAP而出现问题,导致 cpu 峰值和系统性能下降。

kswapd0 的高 CPU 使用率表示内存不足并且正在进行内存交换。

系统检查

Swappiness

查看文件cat /proc/sys/vm/swappiness

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.  A value of 0 instructs the kernel not to
initiate swap until the amount of free and file-backed pages is less
than the high water mark in a zone.

The default value is 60.

谷歌翻译下:

此控件用于定义内核交换的积极程度内存页。较高的值会增加侵略性,较低的值减少交换量。值为 0 指示内核不要启动交换,直到空闲页面和文件备份页面的数量减少高于区域中的高水位线。默认值为 60。

说明:设置为 0 可以防止不必要的交换活动。

vfs_cache_pressure

查看文件cat /proc/sys/vm/vfs_cache_pressure

default value is 100, when set to 0, it will never reclaim dentries and inodes due to memory pressure and this can easily lead to out-of-memory conditions. With vfs_cache_pressure=1000, it will look for ten times more freeable objects than there are.

谷歌翻译下:

默认值为 100,当设置为 0 时,由于内存压力,它永远不会回收 dentry 和 inode,这很容易导致内存不足的情况。当 vfs_cache_pressure=1000 时,它会寻找比现在多十倍的可释放对象。

transparent_hugepage

查看文件cat /sys/kernel/mm/transparent_hugepage/enabled

简而言之,它应该设置为always

故障修复

关闭 swappiness

echo vm.swappiness=0 | tee -a /etc/sysctl.conf

清理缓存

echo 1 > /proc/sys/vm/drop_caches

参考链接

如何解决kswapd0高CPU占用问题.md