Linux kswapd0 进程占用 CPU 过高的问题
今天突然发现向我的服务器提交代码非常慢,巨慢,然后测试版的应用请求响应也非常慢,一开始以为是网络问题,但登录服务器一看,发现 CPU 很忙。
2核2G 的 Ubuntu,load average: 1.93, 0.99, 0.55。
排名第一的进程是 kswapd0,问了一下 kimi,得到的回答是:
kswapd0 是 Linux 系统中的一个内核线程,主要负责虚拟内存管理中的换页操作。当系统的物理内存不足时,kswapd0 会执行换页操作,将一些不常用的内存页从物理内存移动到磁盘上的交换空间(swap space),以释放物理内存供其他进程使用。这个过程会消耗大量的 CPU 资源,因此如果 kswapd0 进程占用 CPU 过高,通常意味着系统正在进行大量的换页操作,可能是因为物理内存不足。
kswapd0 的行为可以通过修改内核参数 vm.swappiness 来控制,这个参数决定了系统倾向于使用 swap 空间的程度。数值越低,系统越少使用 swap 空间,数值越高,则系统更多地使用 swap 空间。
在某些情况下,如果 kswapd0 进程异常占用 CPU 资源,也可能是由于系统被恶意软件如挖矿病毒影响,这些病毒可能会伪装成 kswapd0 进程,消耗系统资源进行非法挖矿活动。因此,如果发现 kswapd0 进程异常,除了检查内存使用情况外,还应考虑进行安全检查,以排除恶意软件的可能性。
也就是说,内存不够了。
执行 free -h
看了一下,还可以,可能是写笔记这会没操作。
$ free -h
total used free shared buff/cache available
Mem: 1.7Gi 1.1Gi 83Mi 132Mi 496Mi 261Mi
Swap: 0B 0B 0B
确实,我这台测试机部署的东西蛮多的,除了 MySQL,最吃内存的还是 wiki.js。上次测试完之后没有停掉,发现这东西跑起来至少要 300MB 的内存——我才创建了两个空页面,也没啥内容,太可怕了,node 快赶上 java 了...
另外还发现一个问题,阿里云盾(AliYunDun)占用 CPU 也很高,我的机器本来就弱鸡,进一步加剧了性能危机。
看来得找个机会 卸载 AliYunDun 了。