如何判断是哪个进程导致 kswapd 被使用?

Des*_*awn 27 linux swap virtual-memory centos5

我看到 kswapd 使用 100% CPU ......我怎么知道代表哪个进程使用 kswapd 这么多?

Pau*_*aul 21

kswapd 正在管理交换空间以响应大于所有进程物理可用的内存需求。

它与流程无关,它只对访问哪些页面以及何时访问感兴趣(当然比这更复杂,但为了简单起见,我们也可以这样查看)。

所以真正的问题是“哪些进程对内存的负担最大,导致 kswapd 需要一直分页”。

使用“top”并切换到内存使用排序模式最容易回答。


Mik*_*ike 10

你可以编写脚本......但你也可以通过 top 来完成

运行 top 然后按O然后按p然后输入

现在所有进程都按交换使用情况排序,您可以看到哪些进程正在使用它

  • O 为我显示过滤器选项,按 p 然后输入给我“'include'过滤器分隔符丢失” (2认同)

Zen*_*xer 9

如果您使用的是 Ubuntu 15.10 或更高版本,这实际上可能是错误的结果,特别是如果您的系统是缺少交换分区的虚拟机(例如 AWS EC2)。该问题存在于其他发行版上,但在撰写本文时,尚不清楚相同的修复程序是否普遍适用。

临时解决方法:

sudo ln -s /dev/null /etc/udev/rules.d/40-vm-hotadd.rules
sudo reboot
Run Code Online (Sandbox Code Playgroud)

请注意,这将禁用 Xen 和 Hyper-V 虚拟机的热添加 RAM/CPU。


Tin*_*ino 7

kswapd某处似乎也存在错误,希望仅在较旧的内核上。

现在,kswapd 几乎每天都会在更大的集群中的一些机器上随机发疯(尽管使用的是非当前内核)。两个 kswapd 进程上的 CPU 均为 100%。没有其他正在运行的进程(ssh shell 除外)、大量可用 RAM(超过 700 MB)并且根本没有使用 SWAP。没有换入,也没有换出。

还没有任何解释,为什么特定的机器被击中而另一台没有。它似乎不是完全随机的,因为它通常会在很短的时间内击中不止一台机器。看起来闲置的机器以及处于高压下的机器不太可能(!)受到这种影响。所以它必须对工作负载做一些事情,并且只有在机器既不空闲也不很忙时才会命中。

如果问题没有解决,就没有任何帮助了。杀死所有进程(并没有变得不可杀死),卸载所有文件系统,什么都没有。kswapd仍然保持在 100% CPU。我怀疑 SMP 内核中存在一些自旋锁竞争,但也可能是我错了。

也许看我的回答serverfault.com/questions/316995/#493257

笔记:

  • 重新启动受影响的机器通常会失败,因为关闭过程开始在某处挂起。
  • 没有与 Internet 的直接连接。外部原因不太可能。
  • 从负载的角度来看,这似乎取决于机器处理的工作负载类型,因为我们的机器从未受到影响(还)。
  • 对不起,我不能更具体地说明我们做什么以及为什么。
  • 是的,我在猜测。因为这是一个非常令人费解的效果,今天。