我看到kswapd使用了100%的CPU ...我怎样才能知道kswapd代表哪个进程使用了那么多?
我看到kswapd使用了100%的CPU ...我怎样才能知道kswapd代表哪个进程使用了那么多?
Answers:
kswapd正在管理交换空间,以响应对内存的需求大于对所有进程的物理可用。
它与过程无关,它只对访问哪些页面以及何时访问感兴趣(当然比这要复杂得多,但是为了简单起见,我们最好还是这样查看)。
因此,真正的问题是“哪些进程对内存的负担最大,导致kswapd一直需要分页”。
使用“ top”并切换到内存使用率排序模式最容易回答。
top
告诉我,没有时间在IO等待上,几乎100%的时间在系统上。更多信息:交换时,kswapd经常使用100%CPU
您可以编写脚本..但也可以通过顶部完成
运行顶部,然后按O,然后按p,然后输入
现在,所有进程均按交换使用情况进行排序,您可以查看正在使用哪些进程
如果您使用的是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。
echo 3 > /proc/sys/vm/drop_caches
一旦开始发生,它可以缓解这种情况。我现在先发制人地执行了一项cron作业命令,这似乎有所帮助,或者至少在我离开计算机时限制了OOM大屠杀的持续时间。
似乎在kswapd
某个地方也有bug ,希望只能在较旧的内核上。
现在,kswapd几乎每天都在更大群集中的某些计算机上随机发疯(尽管使用非当前内核)。两个kswapd进程的CPU均为100%。没有其他正在运行的进程(ssh shell除外),大量的可用RAM(超过700 MB)以及根本没有使用SWAP。没有交换,也没有交换。
尚无任何解释,为什么一台特定的机器被命中,而另一台却没有。这似乎不是完全随机的,因为它通常会在很短的时间内击中多台机器。看起来像是闲置的机器以及处于高压下的机器受此影响的可能性较小。因此,它必须承担一些工作量,并且只有在机器既不闲置也不很忙时才会命中。
如果问题解决了,那就没有帮助了。杀死所有进程(这些进程不会变得不可杀),卸载所有文件系统,什么也没有。kswapd
仍保持100%CPU。我怀疑在SMP内核中发生了自旋锁竞赛,但是我也很可能错了。
也许看到我的答案serverfault.com/questions/316995/#493257
笔记: