2016-03-31 13 views
-1

Ich brauche Statistiken von meinem Centos 6.7 mit Cpanel und senden an meinen externen Monitor-Server. Was ich möchte, ist eine durchschnittliche CPU-Last pro Benutzer oder pro Prozessname in den letzten 3 Minuten. Nach vielen Forschungs- und Test keine praticable Lösungen auseinander bash laufen oben mitMonitor Linux-Prozess von Benutzer oder Name

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

zweite Iteration sieht aus wie ...

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... 

dann grep (nur auf der zweiten Iteration Ausgabe) mit COMMAND oder USER gefunden , Summe und dividieren durch 100-Wert wie CPU-Last zu bekommen

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

ich soll wohl auch versuchen, die Prozesszeiten usw. zu zählen?, vielleicht gibt es einen einfacheren Weg, um die gleiche Auflösung zu erreichen, ult, vielleicht mit Software von Drittanbietern, um Statistiken zu generieren?

Danke.

Antwort

0

top erhält seine Informationen von /proc/*/stat. Jedes numerische Verzeichnis unter /proc ist eine Prozessnummer für einen aktuell laufenden Prozess.

Es kann einfacher für Sie sein, Daten direkt aus diesen Verzeichnissen zu sammeln. Das Datenformat ist gut definiert und kann in man proc unter dem Unterabschnitt "/ proc/[pid]/stat" gefunden werden.

0

können Sie versuchen, das pidstat Tool (Teil des sysstat Pakets):

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

Dies wird die prozentuale CPU-Auslastung aller Prozesse gibt die httpd Befehlsfolge und die johnd Benutzer über ein 180 -zweiten Intervall passend .

-1

ok, pidstat ist besser, danke !, aber wenn USER pid nur für wenige Sekunden ausgeführt wird, wird keine CPU-Nutzung gemeldet. Ich fand beste Ergebnis mit:

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

dann

#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" 

mit dieser i bester CPU-Auslastung stat pro USER erhalten, auch wenn Prozess nur für einige Sekunden laufen, aber mit hohem CPU-Auslastung