与任何可见进程无关的严重 CPU 峰值

与任何可见进程无关的严重 CPU 峰值

这个问题真的很奇怪。我时不时地会遇到非常令人不快的 CPU 峰值,大约 5 分钟内所有核心的 CPU 占用率达到 80-90%。当我在 htop 或系统监视器中查看 conky 并按 % CPU 排序时,我看不到任何占用如此多 CPU 的进程。

自此以后我唯一改变的是:

  • 我转到了内核版本 2.6.35(家庭编译,从 2.6.24-1 升级)
  • 我安装了 Nvidia 驱动程序 256.44(高于 256.34)

现在,我愿意降级其中一个或两个来查找问题,但我更愿意尽可能科学地进行操作,并在降级之前找出导致 CPU 爆炸的原因。

编辑:我的具体问题看起来像是他们最新驱动程序中的 nvidia 回归。其他人也出现了类似的峰值

答案1

“大约 5 分钟内,所有核心的 CPU 繁忙程度达到 80-90%”

通过利用 sysstat 包中的 pidstat,您或许能够查明罪魁祸首。

只需运行pidstat -u | sort -nr -k 7,7 | head -10,占用 CPU 最多的进程就应该位于最上面一行。

答案2

这可能是一个内核线程,大多数性能监视器默认隐藏这些线程。在 htop 中,您可以使用“K”(shift+k)隐藏/显示内核线程。

答案3

我将尝试使用一些 shell 脚本来查找问题的原因:

#!/bin/sh
MAXLOAD=100
CURRLOAD=`uptime | sed 's@.*load average: \([^,]*\).*@\1@' | sed 's@0\?.0\?@@'`

if [ $CURRLOAD -gt $MAXLOAD ]; then                                             
  ps -eo tid,pcpu,comm | sort -n -k 2 | tail -n 5 | \
    mail -s "High load" -e [email protected]
fi

该脚本有两个变量MAXLOADCURRLOAD。第一个变量应为高负载乘以 100。因此,如果您遇到峰值并看到系统负载上升到 2 或 3,则应将其设置MAXLOAD为 200 左右的某个值。$CURRLOAD获取的输出uptime,查找负载并删除点以及前导零。

如果某一时刻的负载过高,它会打印出 CPU 利用率最高的五个进程并将它们发送到[email protected]

该脚本应该可以帮助您找到峰值的原因,如果您知道原因,您也许可以解决您的问题。

答案4

最近修复了一些错误,可能会纠正此问题。如果您正在运行 Ubuntu,我建议您坚持使用 Ubuntu 内核,通过定期更新获取补丁。我建议安装 Lucid 以获得支持和稳定性。如果您知道 Lucid 中没有您需要的功能,您可以选择 Maverick。

相关内容