【发布时间】:2012-11-27 21:52:22
【问题描述】:
我想编写一个脚本(在 linux 上使用 bash 或 Perl)来监视 Apache 并在它超过 X% CPU 时重新启动 Apache。 我知道我需要获取 Apache 的总 CPU 使用率,因为它打开了子进程。
如何获取 Apache 的总 CPU 使用率?
【问题讨论】:
我想编写一个脚本(在 linux 上使用 bash 或 Perl)来监视 Apache 并在它超过 X% CPU 时重新启动 Apache。 我知道我需要获取 Apache 的总 CPU 使用率,因为它打开了子进程。
如何获取 Apache 的总 CPU 使用率?
【问题讨论】:
尝试以下方法,但请确保将 Apache 进程名称更新为您的实际名称(我的是 httpd):
ps u -C httpd | awk '{sum += $3} END {print sum}'
这将获得所有正在运行的 apache 进程的列表,并使用 awk 对 ps 的输出中的 %CPU 列求和。
【讨论】:
apache 你的 apache 进程的名称吗?我见过httpd 和apache2,但从未见过apache?
ps u -U apache,在这种情况下,apache 是运行 Apache 的用户帐户。如果这不起作用,您能否验证 Apache 是否正在运行,如果是,请运行 ps aux 并显示输出,以便我们可以看到进程列表以获取进程或用户名?
这将返回父 apache 进程和所有子进程的总负载,以百分比表示,没有任何附加信息,以便您可以轻松地以任何方式使用此脚本:
ps --no-heading -o pcpu -C httpd | awk '{s+=$1} END {print s}'
【讨论】:
这将列出每个 apache2 进程的总 CPU 使用率:
ps u -C apache2 | awk '{print $3}' | grep -v "%CPU"
但是请注意,即使当前 CPU 使用率很高,总(=平均)CPU 使用率也可能相当低,尤其是对于长时间运行的进程。
【讨论】: