2016-03-31 2 views
-1

Мне нужно получить статистику с моего Centos 6.7 с помощью Cpanel и отправить на сервер внешнего монитора. То, что я хотел бы получить, - средняя загрузка процессора на пользователя или имя процесса за последние 3 минуты. После многих исследований и испытаний не нашли каких-либо praticable решения, кроме Баш запуска топ сМониторинг процесса Linux пользователем или именем

top -d 180 -b -n 2 > /top.log 

второй итерации выглядит ...

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
38017 mysql  20 0 760m 265m 6324 S 1.4 14.2 244:27.08 mysqld 
39501 nobody 20 0 1047m 93m 7068 S 0.1 5.0 0:06.80 httpd 
54877 johnd  20 0 32728 3612 2364 S 0.0 0.2 0:00.09 imap 
51530 johnd  20 0 353m 5372 1928 S 0.0 0.3 0:04.17 php-fpm 
39500 nobody 20 0 1046m 79m 3656 S 0.0 4.3 0:02.57 httpd 
    7 root  20 0  0 0 0 S 0.0 0.0 27:47.61 events/0 
39497 nobody 20 0 1046m 84m 7784 S 0.0 4.5 0:02.77 httpd 
etc... 

затем Grep (только на второй выход итерации) с COMMAND или USER , сумма и разделить на 100, чтобы получить значение, как CPU-нагрузки

echo "$PRTGTOP" | grep johnd | awk '{ sum += $9; } END { print sum/100; }' 

я, вероятно, следует также пытаться сосчитать время процесса и т.д.?, может быть, есть более простой способ для достижения тех же Рез ult, может быть, с сторонним программным обеспечением для генерации статистики?

Спасибо.

ответ

0

top получает информацию от /proc/*/stat. Каждый цифровой каталог под /proc является номером процесса для текущего процесса.

Вам может быть проще собрать данные непосредственно из этих справочников. Формат данных хорошо определен и может быть найден в man proc в подразделе под названием «/ proc/[pid]/stat».

0

Вы можете попробовать инструмент pidstat (часть sysstat пакета):

pidstat -C httpd -U johnd -h -u 180 1 | awk '{ sum += $7; } END { print sum/100;}' 

Это вернет использование процента ЦП всех процессов, соответствующих строку httpd команды и johnd пользователя над 180 -Второй интервала ,

-1

ok, pidstat лучше, спасибо !, но если USER pid запускается всего несколько секунд, то не сообщается о потреблении процессора. я нашел наилучший результат с:

#run pidstat with 10 iterations for 18 times 
pidstat -U -u 10 18 > /pidstat.log 

затем

#sum all cpu usage and divide by 18 

cat /pidstat.log | grep -v Average | grep johnd | awk '{ sum += $8; } END { print sum/100/18;}' OFMT="%3.3f" 
cat /pidstat.log | grep -v Average | grep httpd | awk '{ sum += $8; } END { print sum/100/18;}' OFMT="%3.3f" 

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

Смежные вопросы