Получить загрузку процессора в shell-скрипте?

StackOverflow https://stackoverflow.com/questions/50312

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Однако я обнаружил, что это дает другое определение "% загрузки процессора", чем хотелось бы - согласно справочным страницам для ps, pcpu определяется как:

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

Пользовательская загрузка: 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/.[^.]*$//'

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

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

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

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

top -b -n 1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top