按进程名称和日志CPU使用情况进行过滤

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

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

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

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

要将top的结果写入文件,请使用-n 1选项(仅重复一次)并将输出redirect到日志文件。

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

要做到这一点每秒,也许一个sleepwhile循环会做?

 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 

另一个select是:

 top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt 
  • -d选项允许设置top使用的频率来刷新数据。
  • 选项-b意味着top的传统界面不被使用。 相反,它将所有内容发送到标准输出,然后您可以使用pipe道(|)或redirect(>)。
  • 选项-n通知顶层应该执行的迭代次数。

之后,你可以input:

 cat log.txt | grep USER_OF_PROCESS 

你会看到进程的执行时间,还有%CPU,内存等等。

 #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