我看到kswapd使用100%的CPU …我怎么能告诉哪个进程的代表kswapd正在使用这么多?
kswapd正在pipe理交换空间,以响应比所有进程物理上可用的内存需求更大的内存需求。
这是stream程不可知论的,它只关心什么页面访问什么时候(当然比这更复杂,但为了简单起见,我们也可以这样看)。
所以真正的问题是“哪些进程对内存造成最大的负担,导致kswapd需要一直寻呼”。
这是最容易回答使用“顶部”和切换到内存使用分类模式。
你可以脚本,但你也可以通过顶部
运行顶部,然后按O然后按P然后input
现在所有的进程都按照交换使用情况sorting,你可以看到哪些进程在使用它
如果你使用的是Ubuntu 15.10或更高版本,这可能实际上是一个错误的结果,特别是如果你的系统是一个缺乏交换分区的虚拟机(例如AWS EC2)。 这个问题在其他发行版本上存在 ,但是到了写作的时候,目前还不清楚同一个修补程序是否普遍适用。
临时解决方法:
sudo ln -s /dev/null /etc/udev/rules.d/40-vm-hotadd.rules sudo reboot
请注意,这将禁用Xen和Hyper-V虚拟机的热添加RAM / CPU。
在kswapd
某个地方似乎也有一个bug,希望只能在较老的kernel上。
几乎每一天,现在kswapd都会在一个更大的群集中的某些机器上随机地进行访问(尽pipe如此,还有一个非当前的内核)。 两个kswapd进程都有100%的CPU。 没有其他正在运行的进程(ssh shell除外),大量的可用RAM(超过700 MB),并且根本没有使用SWAP。 没有交换,也没有交换。
没有任何解释,为什么一个特定的机器被击中,另一个不是。 似乎不是完全随机的,因为它通常在短时间内击中多台机器。 看起来闲置的机器,以及处于高压下的机器都不太可能受到这种影响。 所以它必须做一些工作负荷,只有当机器既不空闲也非常繁忙时才会打。
如果问题没有任何帮助了。 杀死所有的进程(没有变成不可驱动的),卸载所有的文件系统,什么也没有。 kswapd
仍然保持100%的CPU。 我怀疑SMP内核中有一些spinlock比赛,但也可能是我错了。
也许看到我的答案serverfault.com/questions/316995/#493257
笔记: