Menü Schließen

Debian hohen CPU Load analysieren

Unix Shell

Nachfolgend ein paar Befehle und Möglichkeiten zum analysieren des CPU und Disk Load unter Debian. Vorausgegangen ist bei mir ein System, dass auf einmal einen deutlichen Ansprung an CPU Load hatte.

Uptime – Befehl

# uptime
15:16:19 up 6 days,  5:34,  1 user,  load average: 0,17, 0,46, 0,49

Ein kurzer Blick mittels # uptime, zeigt den Treind in der letzten Minute, den letzten 5  und 15 Minuten im Durchschnitt. Damit lässt sich kurz ein Gefühl dafür bekommen, ob hier etwas evtl. aus dem “normalen” Bereich läuft.

Dmesg – Befehl

MIttels # dmesg Log kann schnell erkannt werden, ob ein Hardwarefehler wie ein defekter Arbeitsspeicher z.B. vorliegt.

Vmstat – Befehl

Als nächstes schaue ich mittels # vmstat 1 nach der aktuellen Serverperformance. In der ersten Zeile steht die durschnittliche Performance seit dem letzten Neustart.

# vmstat 1

procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 212180 359800 367528 3528312 0 1 807 1053 28 35 14 1 73 12 0
0 2 212180 355148 367528 3528320 0 0 0 1112 474 3978 32 3 20 44 0
0 1 212180 322788 367528 3540328 0 0 0 244 344 868 9 3 0 88 0
1 0 212180 319712 367528 3541512 0 0 32 876 334 6687 53 2 7 38 0
0 0 212180 319816 367528 3541540 0 0 16 320 186 346 18 2 76 4 0
0 0 212180 320860 367528 3541540 0 0 0 40 95 187 0 1 87 12 0
2 0 212180 301408 367528 3559052 0 0 0 1888 295 922 43 3 10 45 0
0 1 212180 162148 367528 3643520 0 0 0 196 289 859 89 9 0 2 0
2 0 212180 144572 367528 3653656 0 0 272 440 569 1336 47 7 15 30 0
0 0 212180 135056 367528 3659564 0 0 0 588 348 1093 43 3 15 38 0
  1. Spalte “wa” im Abschnitt CPU
    1. diese gibt die Zeit an die die CPU auf IO wartet, ein hoher Wert zeigt starke Aktivität auf der Festplatte an
  2. wenn “wa” hoch ist, dann geht der Blick in den Abschnitt “swap” und dort auf “si” und “so”
    1. wenn diese Werte größe Null sind, dann bedeutet dies, dass kein Arbeitsspeicher mehr zur Verfügung steht und ausgelagert werden muss
    2. da der Arbeitsspeicher wesentlich schneller als die Disk ist, kann dies zu einer Verzögerung bei z.B. den HTTP-Diensten führen
  3. nun schau ich wieder im Abschnitt CPU auf die Spale “id”, die die Zeit angibt die die CPU beschäftigt ist
    1. ist der Wert bei ca. Null, bedeutet das, dass die CPU stark beansprucht wird und der Blick geht nach “sy” und “us” was anzeigt ob der Kernel beschäftigt ist oder der nicht Kernelcode, also die Applikationen
    2. wenn “sy” hoch ist, deutet das auf viel Tätigkeit in den Dateiverzeichnissen wie E-Mail z.B. bei der SPAM Erkennung hin
  4. wenn “us” hoch ist, dann kann als nächstes mit den nächsten Tools nach dem Prozess und der Anwendung geschaut werden, die diese CPU-Last erzeugen

PS Befehl – zeige Prozesse nach CPU Nutzung, sortiert mit dem höchsten zu erst und davon die ersten 6 Zeilen

# ps -Ao user,uid,comm,pid,pcpu,tty –sort=-pcpu | head -n 6
USER       UID COMMAND           PID %CPU TT
mysql      110 mysqld            949  8.9 ?
web20     5015 php-cgi         15587  2.3 ?
dovenull   113 imap-login      32758  1.0 ?
web20     5015 php-cgi         21867  0.7 ?
web20     5015 php-cgi         21868  0.6 ?

Hier gut zu sehen, dass MySQL mit 8.9 Prozent am meisten CPU benötigt. Danach folgen dann ein paar Prozesse die auf PHP und eine Webseite hinweisen. Somit wird diese Webseite vermutlich grade “stark” frequentiert.

PS Befehl – der zusätzlich das Argument des ausgeführten Prozesses anzeigt

# ps -eo pcpu,pid,user,args –no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5
8.9   949 mysql    /usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib/mysql/plugin –user=mysql –skip-log-error –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/run/mysqld/mysqld.sock –port=3306
2.9 15587 web20    /usr/bin/php-cgi -d open_basedir=/var/www/clients/client11/web20/web:/var/www/clients/client11/web20/private:/var/www/clients/client11/web20/tmp:/var/www/site/web:/srv/www/site/web:/usr/share/php5:/usr/share/php:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin -d disable_functions= -d suhosin.executor.func.blacklist= -d upload_tmp_dir=/var/www/clients/client11/web20/tmp -d session.save_path=/var/www/clients/client11/web20/tmp -d sendmail_path=/usr/sbin/sendmail -t -i -f webmaster@site
….

Hier der Load von 8.9 für den MySQL Prozess, sowie den Suhosin für eine Seite mit 2.9 Prozent.

TOP Befehl – CPU, Memory uvm Informationen

Befehl TOP Statistiken
Befehl TOP Statistiken

Ein weiterer Befehl ist # top, der umfangreicheinformationen in Liveansicht zeigt. Mit den Optionen:

  • l = load average
  • t = task/cpu statistik
  • m = memory info
  • können die Spalten sortiert werden

ATOP Befehl – umfassende CPU, Memory, Disk uvm Informationen

Atop Befehl Statistiken
Atop Befehl Statistiken

ATOP ist ein Tool das ich gerne empfehle, da es noch mehr Informationen als top liefert. Sortieren lassen sich die Spalten mit folgenden Kürzeln:

Zeigt aktive Prozesse sortiert nach:

  • m = memory
  • d = disk
  • n = network
  • c = full command line

Sortiert die Prozesse nach:

  • C = CPU Aktivität
  • M = Memory Verbrauch
  • D = Disk Aktivität
  • N = Network Aktivität
  • A = am meisten aktiver Prozess (auto)

IOstat – Befehl

Wenn das System stark auf der Festplatte arbeitet (vmstat “bi” und “bo” sind sehr hoch und “si” und “so” sind meist niedrig) , dann läst sich mit dem Befehl “# iostat -x 5”, ich schaue mir den Status für gemessene 5s an, der Disk Load betrachten.

avg-cpu: %user %nice %system %iowait %steal %idle
0,4 0 0,2 6,02 0 93,37
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0 0 0 8,84 0 121,29 27,45 0,14 16,36 0 16,36 7,91 6,99
dm-0 0 0 0 8,03 0 121,29 30,2 0,14 18 0 18 8,7 6,99
  1. der Blick geht auf die letzte Spalte “%util”
    1. wenn dieser bei 100% liegt, dann ist die Disk ausgelastet
    2. da hier nur eine Disk zu sehen ist, kann man so nicht sagen ob es die Datenbank, Web, Mail etc. ist, was die HDD beansprucht
  2. die Spalte “await” ist auch interessant, sie zeigt an wie lange es dauerte bis die Anfrage abgearbeitet werden konnte

IOTop – Befehl

Der Befehl # iotop ist ebenfalls ein ganz wichtiger. Er zeigt wie # top die Auslastung an, jedoch der Disk und die Prozesse mit ihren Parametern die grade auf der Festplatte lesen und schreiben.

Alle Befehle richtig gelesen und interpretiert, sollten reichen um einen Eindruck vom laufenden und ggf. gestörten System zu erhalten. Selbstverständlich gibt es noch viele weitere Tools und Befehlskombinationen…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert