将 TOP 限制为特定进程(没有静态 PID)

将 TOP 限制为特定进程(没有静态 PID)

我想通过 TOP 在我们的应用服务器上监控特定进程。目前,我在 BASH 中使用以下内容来监控我感兴趣的进程:

top -p $(pgrep PSAPPSRV | tr "\\n" "," | sed 's/,$//')

我原以为这是一个很好的解决方案,但我忽略了两个注意事项:

  1. 单个进程可以自行循环,创建新的 PID
  2. 当现有进程负载过大时,服务器可以生成新进程来应对负载。

这两种情况都意味着,如果我在运行上述命令时使用 PID 的“快照”,我就无法长时间监控进程。

这些进程以专用用户身份运行。但是,此用户运行与应用服务器相关的所有进程。而且,应用服务器实际上可能由 30 个进程组成,但我只对特定进程感兴趣。

是否可以将新的 PID 传递到已经运行的 TOP 输出中?

或者最好的策略是以一定的时间间隔重新调用 TOP,并传递当前时间的 PID?

答案1

top确实不是为完成您想要做的事情而设计的(事实上,某些版本top甚至不支持该-p选项)。

对于您的情况,我能想到的最佳选择是包装top一个脚本,使用-d-n选项反复调用它,例如

#!/bin/sh
while [ true ]; do
    clear
    top -d1 -n15 -p $(pgrep PSAPPSRV | tr "\\n" "," | sed 's/,$//')
    sleep 1
done

这将使top显示一个包含最多 15 个进程的屏幕,休眠一秒钟,然后再次执行(直到使用CTRL+中止脚本C

这会失去的top高级功能(例如更改排序顺序的能力 - 因此如果它很重要请确保您指定它),但无需太多工作即可为您提供相同类型的显示。

相关内容