如何查找过去一次正在运行的进程?

jun*_*sal 6 linux process cpu-usage sar

我被要求调查今天早上发生的高 CPU 使用率警报。我使用sar -p并看到当时出现的高CPU使用率

接下来我曾经ps -eo pcpu,pid,user,args | sort -r -k1 | less列出了这个时间前 10 名的内存猪

现在我如何找出早上那个特定时间导致瓶颈的进程。我是一名 Java 开发人员,而不是 Linux 专家。

甚至有可能吗?

小智 9

有几种选择:

  1. 使用定期将所需数据写入日志文件的脚本。您可以使用 cron 每 x 分钟将 ps(和其他命令)的输出写入日志文件。
  2. 最好使用专门的程序,它会为您执行此操作。atop 在这方面非常擅长,因为它负责日志文件的保留。

atop 可通过 CentOS/RHEL/Fedora 的 EPEL 存储库和 Debian/Ubuntu 的默认存储库获得。

您可以像普通的实时 top 实用程序一样使用 atop,但行为略有不同(查看击键的联机帮助页)。

更有趣的部分是:一旦安装,守护进程开始将数据记录到 /var/log/atop 中,您可以再次使用 atop 读取这些文件:

atop -r /var/log/atop/atop_20160128
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问所有“顶级”功能(排序/查看内存/CPU/IO 使用情况等),您可以通过 't' 向前跳转 10 分钟,使用 'T' 向后跳转 10 分钟或跳转通过'b'的特定时间。

查看顶部联机帮助页,谷歌有很多关于它的方法。

可能还有其他解决方案,但在进行更多定制设置之前,atop 易于理解和使用,并且是一个良好的开端。