终止占用所有 CPU 的进程

终止占用所有 CPU 的进程

因此 ImageMagick 具有“转换”命令,我使用它在我的(Linux)网络平台上处理图像大小调整等。

有时此命令会“卡住”,这意味着它会开始消耗机器资源,直到整个机器不可用。发生这种情况时,登录机器可能需要几分钟。

因此,我正在寻找以下两种解决方案之一:

  1. 使用此命令后——有没有办法确定它可以使用的最大资源量?

  2. 我可以运行一个 cron 脚本来识别这些“卡住”的进程并终止它们吗?即根据 CPU 时间或 CPU 使用率进行过滤,并在超过特定阈值时终止它们。

我可能更喜欢解决方案 2,因为解决方案 1 仍然会产生几个这样的进程,每个进程都是有限的、卡住的,而且它们一起仍然会耗尽我的资源。

我无法确定这种情况何时发生以及为什么发生,系统运行缓慢并卡住,直到我“killall convert”,然后一切正常。此命令每小时运行数千次,因此除非我以某种方式记录每次使用情况,否则我无法说出哪一个卡住了,很遗憾。

因此,基本上,当转换卡住时,有一个 shell 脚本可以识别、终止并记录。

有任何想法吗?

答案1

使用此命令后——有没有办法确定它可以使用的最大资源量?

在调用转换命令之前,您可以对进程可以使用的最大 CPU 时间设置资源限制,convert然后在超出限制后自动终止。

这取决于您最初如何调用命令。这exec可能是不必要的。

#!/bin/sh
ulimit -St 60
exec /usr/bin/convert $*
## if exec not present this gets executed after.
ulimit -St unlimited

答案2

我创建了一个脚本,如果 CPU 使用率在 YY 秒内大于 XX%,则杀死数组中列出的某些进程,或者杀死运行时间超过 ZZ 秒的进程。

您可以在文件顶部设置XX,YY,ZZ。

您可以使用 ps 或 top 来检查进程。

还有一种试运行模式,用于检查但不会杀死。

最后,如果某些进程被终止,脚本会发送一封电子邮件。

这是我在 Github 上的仓库:https://github.com/padosoft/kill-process

以下是一些截图: 示例输出

相关内容