Answers:
您可以通过以下两种方法进行操作。请注意,完全有可能在一个失控的场景中导致许多进程,而不仅仅是一个。
第一种方法是将pidstat设置为在后台运行并生成数据。
pidstat -u 600 >/var/log/pidstats.log & disown $!
这将使您以十分钟的间隔非常详细地了解系统的运行情况。我建议这是您的首选,因为它可以生成最有价值/最可靠的数据。
这有一个问题,主要是如果盒子进入失控的cpu循环并产生巨大的负载-您不能保证实际的过程会在负载期间及时执行(如果有的话),因此您实际上可能会错过输出!
查找此内容的第二种方法是启用流程记帐。可能更多是长期选择。
accton on
这将启用流程记帐(如果尚未添加)。如果未运行,则需要一定时间才能运行。
已经运行了24小时-您可以运行这样的命令(将产生如下输出)
# sa --percentages --separate-times
108 100.00% 7.84re 100.00% 0.00u 100.00% 0.00s 100.00% 0avio 19803k
2 1.85% 0.00re 0.05% 0.00u 75.00% 0.00s 0.00% 0avio 29328k troff
2 1.85% 0.37re 4.73% 0.00u 25.00% 0.00s 44.44% 0avio 29632k man
7 6.48% 0.00re 0.01% 0.00u 0.00% 0.00s 44.44% 0avio 28400k ps
4 3.70% 0.00re 0.02% 0.00u 0.00% 0.00s 11.11% 0avio 9753k ***other*
26 24.07% 0.08re 1.01% 0.00u 0.00% 0.00s 0.00% 0avio 1130k sa
14 12.96% 0.00re 0.01% 0.00u 0.00% 0.00s 0.00% 0avio 28544k ksmtuned*
14 12.96% 0.00re 0.01% 0.00u 0.00% 0.00s 0.00% 0avio 28096k awk
14 12.96% 0.00re 0.01% 0.00u 0.00% 0.00s 0.00% 0avio 29623k man*
7 6.48% 7.00re 89.26% 0.00u 0.00% 0.00s
列的排序方式如下:
您要查找的是生成最多用户/系统CPU时间的进程类型。
这会将数据分解为CPU时间总量(第一行),然后细分该CPU时间的分配方式。进程计费仅在进程启动时才正确计费,因此,最好在启用它以确保考虑所有服务后重新启动系统。
实际上,这决不会给您一个确定的想法,它可能是导致此问题的过程,但可能会给您带来良好的感觉。由于可能是24小时快照,因此结果可能会出现偏差,因此请记住这一点。它也应该始终记录日志,因为它具有内核功能,并且与pidstat不同,即使在重负载期间也始终会产生输出。
可用的最后一个选项还使用进程记帐,因此您可以如上所述将其打开,但是使用程序“ lastcomm”可以生成问题发生时执行的进程的一些统计信息以及每个进程的cpu统计信息。
lastcomm | grep "May 8 22:[01234]"
kworker/1:0 F root __ 0.00 secs Tue May 8 22:20
sleep root __ 0.00 secs Tue May 8 22:49
sa root pts/0 0.00 secs Tue May 8 22:49
sa root pts/0 0.00 secs Tue May 8 22:49
sa X root pts/0 0.00 secs Tue May 8 22:49
ksmtuned F root __ 0.00 secs Tue May 8 22:49
awk root __ 0.00 secs Tue May 8 22:49
这也可能会给您一些提示,指出可能是什么引起了问题。