是否有linux top命令的选项,我可以按名称过滤进程,并将该进程的CPU使用率每1秒写入一个日志文件?
答案 0 :(得分:113)
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
要做到这一点,或许while
循环sleep
会这样做吗?
while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done
要为每个条目添加时间戳,您可以附加date
的输出。 E.g。
while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done
答案 1 :(得分:5)
另一种选择是:
top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt
之后你可以输入:
cat log.txt | grep USER_OF_PROCESS
您将看到进程的执行时间以及%CPU,内存等所有内容。
答案 2 :(得分: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