如何查找过去某一时刻正在运行的进程?

如何查找过去某一时刻正在运行的进程?

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

接下来我ps -eo pcpu,pid,user,args | sort -r -k1 | less列出了此时内存占用最大的 10 个程序

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

这可能吗?

答案1

有多种选择:

  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

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

查看顶部手册页,谷歌有很多关于它的操作方法。

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

相关内容