如何捕捉进程占用100%cpu?

How to catch the process took 100% cpu?

我的服务器在昨晚 12:30AM 左右没有响应。我今天早上发现了它,甚至无法进入它。网络监视器告诉我我的 CPU 使用率为 100%。我唯一能做的就是硬重启它。重启后一切正常

但我认为潜在的问题仍然存在,因为我不知道昨晚哪个进程占用了这么高的 CPU 使用率。

我是否可以按进程找出历史 CPU 使用情况?或者如果没有,我可以做些什么来预防,或者至少监控并了解它?

我正在考虑将 "top" 命令结果每分钟保存到文件中,这样也许我可以捕捉到它,但也许还有其他更好的主意?

非常感谢!

有两种选择 - 首先,您可以启动周期性 CRON 脚本,该脚本将每分钟或每 5 分钟检查一次整体 CPU 使用情况。可以使用以下任一命令确定系统的总体 CPU 使用情况: 顶部-bn1 | grep "Cpu(s)" | sed "s/.*, ([0-9.])%* id.*//" | awk '{打印 100 - $1}' 要么 统计 | grep -A 5 "%空闲" |尾-n 1 | awk -F " " '{print 100 - $13}'a

脚本应该获取 CPU 的使用率,并且应该检查 CPU 的使用率是否超过阈值,比如 75%。如果发生这种情况,脚本可以将 top 命令 (top -b -n 2) 的输出转储到文件中。

第二种选择是使用一些开源监控工具,如 monit (https://mmonit.com/monit/)。 Monit 可用于监控系统 CPU 使用情况,还可以对其进行编程,以便在 CPU 使用情况超过阈值时采取措施。