为什么 kswapd 在空闲系统上使用高 CPU?

为什么 kswapd 在空闲系统上使用高 CPU?

我有一个空闲的 Linux centOS 系统,但是 kswapd 却使用了 100% 的 CPU。

我所运行的只是一个带有 top 的 bash 会话....我有 32G RAM,但 kswapd 持续使用 100% 的 CPU 超过 4 个小时。

答案1

据我所知,这与可用 RAM 或 SWAP 无关。我们这里也有同样的问题,有时会影响生产机器,并且有大量可用 RAM,通常超过 700 MB,没有要同步的脏缓冲区,并且使用了 0 字节的 SWAP。它肯定看起来像是由于某些未知的竞争条件而导致的严重内核错误。

目前我们运行 CentOS 内核 2.6.18-194.el5,并将尝试用一些较新的内核替换它,因为我们认为这可能会有所帮助。

更新:

RedHat 已确认这是 2.6.18-194.el5 的内核问题

解决方案:

Minimum: kernel-2.6.18-194.32.1.el5 contains the immediate bugfix
Better: kernel-2.6.18-238.el5 contains additional kswapd-related bugfixes
Best: kernel-2.6.18-348.4.1.el5 latest kernel which runs with RHEL 5.5 without change

与此同时有一个脚本,它可以很好地检测出 100% CPU 的情况。我们的监控每分钟都会调用它来通知我们有关情况。如果这种情况持续太久,受影响的机器会因为越来越多无法杀死的进程使用 100% CPU 而完全锁定,直到机器变得完全无法管理。

目前已知的解决该问题的唯一方法是手动硬重启受影响的机器。 /sbin/reboot失败了,因为机器在关机时挂起的次数太多了。

要从任何 root shell 命令行硬重启机器而不直接访问控制台,请执行以下操作:

echo 10 > /proc/sys/kernel/panic
echo 1 > /proc/sys/kernel/sysrq
echo s > /proc/sysrq-trigger
sleep 5
echo s > /proc/sysrq-trigger
sleep 1
echo b > /proc/sysrq-trigger

请记住,请在机器静止后执行此操作,以便不再有进程写入磁盘。这可以防止fsck重新启动后出现严重问题。

抱歉,没有真正的解决方案,但 HTH。请记住,除了这里描述的之外,可能还有其他因素会导致 kswapd 出现 100% CPU 情况。因此,在这种情况下自动重启可能不是一个好主意。

相关内容