Фильтр по имени процесса и журналу загрузки процессора - PullRequest
69 голосов
/ 03 января 2012

Есть ли опция для команды linux top, где я могу фильтровать процессы по имени и записывать использование процессора этим процессом каждую 1 секунду в файл журнала?

Ответы [ 3 ]

113 голосов
/ 03 января 2012

top & pgrep

Чтобы отфильтровать вывод top по имени процесса, вы можете использовать pgrep, чтобы получить список PID s по имени процесса, а затем передать их параметру -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.Например,

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done
5 голосов
/ 06 декабря 2013

Другая опция:

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

Вы увидите время выполнения процесса, а также% ЦП, Память и все такое.

2 голосов
/ 14 января 2014
#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...