Получить использование процессора в сценарии оболочки? - PullRequest
7 голосов
/ 08 сентября 2008

Я запускаю несколько JMeter тестов на Java-процесс, чтобы определить, насколько быстро реагирует веб-приложение под нагрузкой (более 500 пользователей). JMeter даст время ответа для каждого веб-запроса, и я написал скрипт для проверки связи с Tomcat Manager каждые X секунд, который даст мне текущий размер кучи JVM.

Я бы хотел собрать статистику на сервере% процессорного времени, используемого Tomcat. Я попытался сделать это в сценарии оболочки, используя ps, например:

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`

... запуск команды каждые X секунд и добавление результатов в текстовый файл. (для всех, кому интересно, pmem = использование% mem и nlwp - количество потоков)

Однако я обнаружил, что это дает другое определение «% загрузки ЦП», чем я хотел бы - согласно man-страницам для ps, pcpu определяется как:

загрузка процессора процессом в формате "##. #". Это используемое время ЦП, деленное на время выполнения процесса (соотношение cputime / realtime), выраженное в процентах.

Другими словами, pcpu дает мне% загрузки ЦП для процесса в течение времени жизни процесса.

Поскольку я хочу делать выборку каждые X секунд, я хотел бы собирать данные об использовании ЦП процессом только в текущее время - подобно тому, что top даст мне (Загрузка ЦП процесса с момента последнего обновления).

Как я могу собрать это из сценария оболочки?

Ответы [ 5 ]

13 голосов
/ 08 сентября 2008

Используйте top -b (и другие переключатели, если вам нужны другие выходы). Он просто выгрузит в стандартный вывод вместо того, чтобы прыгать в окно проклятий.

5 голосов
/ 09 сентября 2008

Самый полезный инструмент, который я нашел для мониторинга сервера при выполнении такого теста, как JMeter, это dstat . Он не только дает вам диапазон статистики с сервера, он выводит в CSV для простого импорта в электронную таблицу и позволяет расширить инструмент с помощью модулей, написанных на Python.

4 голосов
/ 15 марта 2013

Пользовательская нагрузка: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//' Загрузка системы: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//' Холостая нагрузка: top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

Каждый результат является круглым десятичным числом.

2 голосов
/ 08 сентября 2008

Вдобавок ко всему, я бы использовал представление файловой системы / proc о состоянии системы - посмотрите на man 5 proc , чтобы увидеть формат записи для / proc / PID / stat который содержит общую информацию об использовании процессора и использует / proc / stat для получения глобальной системной информации. Чтобы получить использование «текущего времени», вы, вероятно, имеете в виду «процессор, использованный за последние N секунд»; возьмите две выборки на небольшом расстоянии друг от друга, чтобы увидеть текущую скорость использования процессора. Затем вы можете превратить эти значения во что-то полезное. На самом деле, это скорее работа Perl / Ruby / Python, чем сценарий чистой оболочки.

Возможно, вам удастся получить приблизительные данные, которые вам нужны, с помощью / proc / PID / status, который дает среднее значение сна для процесса. Хотя довольно грубые данные.

0 голосов
/ 25 января 2013

также используйте 1 в качестве счетчика итераций, так что вы получите текущий снимок, не дожидаясь получения еще одного за время задержки.

top -b -n 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...