如何解决kswapd0高CPU占用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决kswapd0高CPU占用问题相关的知识,希望对你有一定的参考价值。

故障现象

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

查看系统进程信息:

故障原因

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

以上是关于如何解决kswapd0高CPU占用问题的主要内容,如果未能解决你的问题,请参考以下文章

问题记录关于kswapd0 CPU占用率高的问题

从 kswapd0 进程CPU占用过高 到计算机内存详解

Ubuntu16.04.01 kswapd0 进程占用cpu很高,中了亡命徒(Outlaw)挖矿病毒

Java如何定位占用CPU比较高的问题

电脑CPU占用过高怎么办

Mysql占用CPU过高如何优化,如何解决