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