按进程名称和日志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
要做到这一点每秒,也许一个sleep
的while
循环会做?
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