Фильтр по имени процесса и журнала использования ЦП



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

461   3  

3 ответов:

для фильтрации вывода top на имя процесса, вы можете использовать pgrep чтобы получить список PIDs по имени процесса, затем передайте их в на top. Например:

top -p $(pgrep -d',' http)

Примечание: ограничивает Пидов с запятыми, что, как ожидается, к 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

другой вариант:

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, память и все такое.

#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 -opid -opcpu -opmem -ocomm -c | grep  | sed "s/^/$mydate /" >> $filepath/.txt
  sleep 3
  mydate=`date "+%H:%M:%S"`
done

Comments

    Ничего не найдено.