按进程名称和日志CPU使用情况进行筛选

Bal*_*laB 69 unix linux

有没有linux top命令的选项,我可以按名称过滤进程,并将该进程的CPU使用率每1秒写入一个日志文件?

Sha*_*hin 113

top & pgrep

要按top进程名称过滤输出,可以使用按进程名称 pgrep获取PID列表,然后将它们传递给-p选项top.

例如:

top -p $(pgrep -d',' http)
Run Code Online (Sandbox Code Playgroud)

注意:该-d','选项用逗号分隔PID,这是逗号所期望的top -p.注意2:top如果没有与您指定的名称匹配的正在运行的进程,则将返回失败消息pgrep.

要将结果写入top文件,请使用该-n 1选项(仅一次迭代)并将输出重定向到日志文件.

top -p $(pgrep -d',' http) -n 1 >> your_log_file
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,也许一个while循环与一个sleep会做?

while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done
Run Code Online (Sandbox Code Playgroud)

要为每个条目添加时间戳,您可以附加输出date.例如

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done
Run Code Online (Sandbox Code Playgroud)


小智 5

另一种选择是:

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt
Run Code Online (Sandbox Code Playgroud)
  • 选项-d允许设置top使用的频率来刷新数据.
  • 选项-b表示不使用top的传统接口.相反,它将所有内容发送到标准输出,然后您可以使用管道(|)或重定向(>).
  • 选项-n通知top应执行的迭代次数.

之后你可以输入:

cat log.txt | grep USER_OF_PROCESS
Run Code Online (Sandbox Code Playgroud)

您将看到进程的执行时间以及%CPU,内存和所有这些.