linux top命令是否有一个选项,我可以按名称过滤进程并将该进程的CPU使用率每1秒写入日志文件?
Answers:
top
和 pgrep
要按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
另一个选择是:
top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt
之后,您可以输入:
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