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

时间:2012-01-03 10:07:43

标签: linux unix

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

3 个答案:

答案 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
  • 选项-d允许设置top使用的频率来刷新 数据。
  • 选项-b表示top的传统界面是 不曾用过。相反,它将所有内容发送到标准输出,然后您可以使用管道(|)或重定向(>)。
  • 选项-n通知top应执行的迭代次数。

之后你可以输入:

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