按进程名称过滤并记录CPU使用率


69

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

Answers:


113

toppgrep

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

例如:

top -p $(pgrep -d',' http)

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

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

top -p $(pgrep -d',' http) -n 1 >> your_log_file

要每秒这样做一次,也许用awhile循环sleep就可以了?

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

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

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

感谢Shawn,如何记录每1秒的日期和时间。,这样可以帮助我确定特定进程在什么时间使用了多少CPU。
BalaB 2012年

优雅,非常有用。谢谢!
Mike Ellis

@melihcelik您指的是哪个任务?
肖恩·钦

我以为所有这些都将以相似的格式打印,对不起。我指的是这个命令:top -p $(pgrep -d','http)。我试图在Windows中读取输出,但是没有用。试图在Linux上多读(少读)它,也不起作用。我只能用vi打开它。
melihcelik

1
无效的参数“ -p”。
IgorGanapolsky '18

5

另一个选择是:

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

之后,您可以输入:

cat log.txt | grep USER_OF_PROCESS

您将看到进程的执行时间,以及%CPU,内存等。


无效的参数“ -b”。
IgorGanapolsky '18

@IgorGanapolsky,怪异,选项仍然存在,我认为(linux.die.net/man/1/top
英迪·冈萨雷斯·埃雷拉

2
#You can run following script as ./cpurecorder.sh pid filename
#It will generate output file with memory usage and cpu utilisation.
#You can log other variable by searching man for ps.

`enter code here`filepath=/home/rtcsadm              # modify as desired
interval=20                         # reports per minute
timelimit=6000                      # how long to run, in seconds

mydate=`date "+%H:%M:%S"`           # the timestamp
freq=$((60/$interval))              # for sleep function

while [ "$SECONDS" -le "$timelimit" ] ; do
  ps -p$1 -opid -opcpu -opmem -ocomm -c | grep $1 | sed "s/^/$mydate /" >> $filepath/$2.txt
  sleep 3
  mydate=`date "+%H:%M:%S"`
done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.