10分钟 CPU使用率突发:我怎样才能找出哪些进程是原因?

在这里输入图像说明

上面的CPU使用情况是通过在我的Linux 机器上运行psensor过夜生成的。 请注意10分钟的活动消耗高达40%的至强。 除了可能使用Debian的单用户桌面设置默认configuration的pipe理进程之外,机器应该一直处于闲置状态。 窗户高度是67%(由于在最右边短暂的秒杀)。

我怎样才能找出哪些进程导致这些10分钟的突发CPU使用率? 理想情况下,每个过程都有类似的情节是有帮助的。

从图表来看,在我看来,整个CPU或者半个小时的CPU利用率都很高,这个时间点就是通过cron的东西。 如果你想开始通过这条路线进行调查,那就是我要开始的地方。

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

我build议使用top的批处理模式( -b ),迭代次数为1( -n 1 ),所以你可以在/etc/cron.d文件中添加如下内容:

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

记得要创build一个目录/ var / log / processes来写入。

在早上,从CPU利用率高的时段中选出一个或几个这样的文件,并仔细查看。

默认的sorting顺序似乎是目前最高的CPU利用率,这应该适用于你的情况。 否则,只需将文件导入电子表格应用程序(它应该可以像固定宽度的数据一样导入),然后在%CPU字段上进行sorting。 一旦你知道二进制文件的名字,你可以在磁盘上查找它(包括使用dpkg -S来找出它所属的软件包),或者用pstree来修改上面的内容,以便了解导致这种情况的原因特定的二进制被调用。

反过来,这应该给你一个很好的想法,哪个实际的程序(不仅仅是进程)占用CPU,让你确定是否是一个问题,如果你认为这是一个问题,那么让你弄清楚如何把它关掉。

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

之前有一个关于这方面的讨论可能会为你节省一些时间:

如何logging每个进程的CPU使用情况?

我第一次启动时使用了https://sealion.com/ ,它监视和logging系统信息,比如捕获top等的输出。 也许它会给你你需要跟踪的问题。

我build议使用30秒的时间间隔捕捉数据。 然后,您可以轻松地在任意点导航(t-forward / shift + t – backward),并获得扩展的统计信息 – cpu / io / network loading等。

在这里输入图像说明

在这里输入图像说明