10 分钟内 CPU 使用率突然上升:如何找出导致这一现象的进程?

10 分钟内 CPU 使用率突然上升:如何找出导致这一现象的进程?

在此处输入图片描述

上面的 CPU 使用率图表是通过运行生成的传感器在我的 Linux 机器上运行一整夜。请注意,10 分钟的活动爆发消耗了多达 40% 的 Xeon。除了可能使用 Debian 的单用户桌面设置默认配置的管理进程外,机器应该一整夜处于空闲状态。窗口高度为 67%(由于最右侧的短暂峰值)。

我怎么能够找出哪些进程导致了这些长达 10 分钟的 CPU 使用率激增?理想情况下,每个进程都有类似的图表会很有帮助。

答案1

从图表来看,我觉得 CPU 使用率较高的时间段发生在整点或半点,这表明有某些程序通过 cron 运行。如果您想通过该路径开始调查,我建议您从那里开始。

也就是说,考虑到高 CPU 利用率的爆发时间相当长(在你的情况下是十分钟),你可以简单地通过自己的 cron 作业转储系统状态明天早上进行分析。

我建议使用top批处理模式(-b),迭代次数为 1(-n 1),因此您可以在 /etc/cron.d 中的新文件中添加类似以下内容:

* * * * * root top -b -n 1 > /var/log/processes/$(date +%F_%R)

记得创建一个目录 /var/log/processes 以便写入。

早上,从 CPU 使用率较高的时期中挑选出一个或几个这样的文件,并仔细查看它们。

默认排序顺序似乎是将当前 CPU 利用率最高的放在最上面,这应该适合您的情况。否则,您只需将文件导入电子表格应用程序(它应该可以很好地导入固定宽度数据)并按 %CPU 字段排序。一旦您知道二进制文件的名称,您就可以在磁盘上查找它(包括使用它dpkg -S来确定它属于哪个包),或者使用类似的东西修改上述内容pstree以了解导致调用该特定二进制文件的原因。

反过来,这应该可以让你很好地了解哪些实际程序(而不仅仅是进程)正在占用 CPU,从而让你确定它是否是一个问题,如果你认为它是一个问题,那么你就可以让你知道如何关闭它。

答案2

我认为您必须自己编写代码来获取有关哪个进程正在占用 CPU 的信息。

这里之前有一个讨论,可能会节省您的一些时间:

如何记录每个进程的 CPU 使用率?

答案3

我用了https://sealion.com/当它首次启动时,它会监视和记录系统信息,例如捕获 top 的输出等。也许它会给你提供追踪问题所需的信息。

答案4

我建议使用 atop 以 30 秒为间隔来捕获数据。然后,您可以轻松地在任何点导航(t - 前进/shift + t - 后退)并获得扩展统计信息 - cpu/io/网络负载等。

在此处输入图片描述

在此处输入图片描述

相关内容