我怎么知道什么过程导致kswapd被使用?

我看到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

笔记:

  • 重新启动受影响的机器通常会因为关机进程挂在某处而失败。
  • 没有直接连接到互联网。 国外原因不大可能。
  • 这似乎取决于机器从负载angular度处理的工作负载的types,因为我们有从未受到影响的机器(还)。
  • 对不起,我不能更具体地说我们做什么,为什么。
  • 是的,我在猜测。 因为今天这是一个非常令人费解的效果。