Wie überwache ich CPU und Speicher unter Linux?

Entdecken Sie, wie viel CPU-Leistung oder Arbeitsspeicher ein einzelner Prozess oder das gesamte System beanspruchen.

Als Systemadministrator werden Sie oft mit Situationen konfrontiert, in denen Anwendungen aufgrund einer übermäßigen CPU-, Speicher- oder Netzwerkauslastung langsam laufen oder nicht mehr reagieren. Wenn der Server nur einen einzigen Prozess hostet, ist es einfach zu erkennen, wann dieser alle Ressourcen aufbraucht. Stellen Sie sich jedoch einen gemeinsam genutzten Server vor, auf dem mehrere Dienste laufen – dann müssen Sie ermitteln, welcher Dienst die meisten Ressourcen verbraucht.

Es gibt viele Überwachungsprogramme, die diese Aufgabe standardmäßig erledigen. Wenn Sie jedoch keine solche Software haben oder nach einer Befehlszeilenlösung suchen, sind Sie hier genau richtig. Und das Beste: Alle vorgestellten Lösungen sind KOSTENLOS!

top

Als ersten Schritt sollten Sie sich die Ausgabe von top oder htop ansehen, um eine Übersicht der laufenden Prozesse zu erhalten.

Wie Sie unten sehen, erhalten Sie eine gute Vorstellung davon, welche Ressourcen die einzelnen Prozesse nutzen. Betrachten wir den ersten Eintrag: MySQL verwendet 11,9 % der CPU und 2,5 % des Speichers.

top - 11:57:33 up 0 min,  1 user,  load average: 3.69, 0.96, 0.32
Tasks: 165 total,   2 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s): 21.0 us,  5.5 sy,  0.0 ni, 70.5 id,  1.7 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem :  7637308 total,  5802888 free,   849512 used,   984908 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6495648 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 1986 netdata   20   0 1738856 191560  22948 S  11.6  2.5   0:02.30 mysqld                                                                                                         
 3021 www-data  20   0  255288  78420  55484 S   6.6  1.0   0:01.55 php-fpm                                                                                                        
 3138 www-data  20   0  253096  79780  59228 S   6.6  1.0   0:00.92 php-fpm                                                                                                        
 3153 www-data  20   0  255116  79088  56472 S   5.0  1.0   0:00.70 php-fpm                                                                                                        
 3037 www-data  20   0  257200  81088  56216 S   4.3  1.1   0:01.50 php-fpm                                                                                                        
 3048 www-data  20   0  257088  78740  55380 S   4.3  1.0   0:01.46 php-fpm                                                                                                        
 3054 www-data  20   0  254160  72168  52108 S   3.7  0.9   0:01.32 php-fpm                                                                                                        
 3135 www-data  20   0  255084  75912  54836 S   3.7  1.0   0:00.91 php-fpm                                                                                                        
 3051 www-data  20   0  254096  73804  51964 S   3.0  1.0   0:01.38 php-fpm                                                                                                        
 2962 www-data  20   0   45280   7284   3488 R   2.0  0.1   0:00.22 openresty                                                                                                      
 1062 netdata   20   0  338748  76144   6720 S   1.0  1.0   0:01.31 netdata                                                                                                        
 1702 netdata   20   0   21852   4232   2352 S   1.0  0.1   0:00.34 apps.plugin                                                                                                    
 1729 netdata   20   0   18636   3280   2764 S   0.7  0.0   0:00.05 bash                                                                                                           
 1980 netdata   20   0   62008  12896   5796 S   0.7  0.2   0:00.14 redis-server                                                                                                   
   11 root      20   0       0      0      0 I   0.3  0.0   0:00.14 rcu_sched                                                                                                      
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:00.92 dockerd                                                                                                        
 1857 root      20   0   10600   5564   4276 S   0.3  0.1   0:00.03 containerd-shim                                                                                                
 2045 root      20   0    9948   6028   5016 S   0.3  0.1   0:00.14 forego                                                                                                         
 2934 root      20   0   13616   8760   5928 S   0.3  0.1   0:00.07 docker-gen                                                                                                     
 2966 systemd+  20   0   25784   7924   2340 S   0.3  0.1   0:00.06 nginx

Das Tool top ist auf fast allen Linux-Distributionen vorinstalliert.

Sobald Sie einen verdächtigen Prozess identifiziert haben, möchten Sie sich vielleicht gezielt auf diesen konzentrieren, anstatt alle Prozesse im Blick zu behalten. Dies können Sie mit top und zusätzlichen Parametern erreichen.

Wenn Sie die Prozess-ID (PID) kennen, können Sie den folgenden Befehl verwenden:

top -p $PID

Hier ist ein Beispiel für top -p 3102:

top - 11:59:56 up 3 min,  1 user,  load average: 0.72, 0.70, 0.31
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.1 us,  2.9 sy,  0.0 ni, 89.1 id,  0.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  7637308 total,  5802024 free,   783672 used,  1051612 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6555636 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 3102 www-data  20   0  329500  82376  60640 S   0.0  1.1   0:03.35 php-fpm

Sie können die Ausgabe von top auch mit grep filtern. Hier ist ein Beispiel, um die Docker-Nutzung zu überprüfen:

[email protected]:~# top | grep docker
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.38 dockerd                                                                                                        
 2934 root      20   0   14676   9652   5928 S   0.3  0.1   0:00.54 docker-gen                                                                                                     
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.39 dockerd                                                                                                        
 1007 root      20   0 1347424  74524  38872 S   1.0  1.0   0:01.42 dockerd                                                                                                        
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.55 docker-gen                                                                                                     
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.56 docker-gen

htop

Ähnlich wie top, aber mit mehr Informationen. htop zeigt beispielsweise die Befehlsspalte an, die hilfreich ist, um den Prozesspfad zu ermitteln. Außerdem ist die Ausgabe farblich hervorgehoben.

htop ist möglicherweise nicht standardmäßig installiert, aber Sie können es leicht nachinstallieren.

Installation von htop auf Ubuntu

apt-get install htop

Installation von htop auf CentOS/RHEL 8.x

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf update
dnf install htop

glances

Wie der Name schon sagt, erhalten Sie mit diesem Tool einen Überblick über die Systemauslastung auf einem einzigen Bildschirm. Die laufenden Prozesse werden nach ihrer CPU-Auslastung sortiert.

Sie können glances unter CentOS 8 mit dnf wie folgt installieren:

dnf install glances

Unter CentOS 7 können Sie yum verwenden:

yum install glances

atop

Ähnlich wie top, jedoch mit der nützlichen Funktion, die Ausgabe in einer Datei aufzuzeichnen, um sie später anzuzeigen. Wenn Sie beispielsweise ein Problem haben, das zu bestimmten Zeiten auftritt, können Sie die Ausgabe über crontab oder ein ähnliches Tool in eine Datei schreiben und diese später analysieren.

So zeichnen Sie die Ausgabe in einer Datei auf:

atop -w dateiname

Und so spielen Sie die Ausgabe wieder ab:

atop -r dateiname

Das Tool unterstützt verschiedene Parameter wie Intervall und Anzahl der Samples. Es ist ratsam, die Manual Page (man atop) zu konsultieren.

Wenn Sie nur eine Echtzeit-Fehlerbehebung durchführen möchten, starten Sie atop einfach. Die Ausgabe sollte dann wie folgt aussehen:

Sie können atop wie folgt installieren:

dnf install atop

ps

Werfen wir nun einen Blick auf den Befehl ps.

Sie können den Befehl ps mit einer PID verwenden, um die CPU- und Speicherauslastung eines Prozesses anzuzeigen.

ps -p $PID -o %cpu,%mem

Die Ausgabe sollte ungefähr so aussehen:

[email protected]:~# ps -p 1048 -o %cpu,%mem
%CPU %MEM
 0.2  3.0
[email protected]:~#

nmon

Dies ist ein interaktives Befehlszeilen-Überwachungstool für CPU, Speicher, Festplatten, Netzwerk, NFS und virtuelle Speicherauslastung. Um die Top-Prozesse (nach Auslastung) anzuzeigen, starten Sie nmon und drücken Sie die Taste t.

Sie können nmon wie folgt installieren:

dnf install nmon

Monit

Monit ist eine webbasierte und befehlszeilenfähige Open-Source-Lösung zur Überwachung von Serverressourcen, Daemons, Dateien, Verzeichnissen, Dateisystemen usw.

Monit bietet auch ein praktisches Widget.

Es handelt sich um eine schlanke Überwachungssoftware, aber es gibt noch viel mehr zu entdecken.

Monitorix

Dies ist ein leichtgewichtiges Open-Source-Dienstprogramm zur Überwachung von Linux-Servern. Monitorix verfügt über einen integrierten HTTP-Server, so dass Sie die Auslastung und andere Details über das Web überprüfen können. Einige der angezeigten Nutzungsberichte umfassen:

  • Kernel/Temperatur
  • Dateisystem und I/O
  • Netzwerkverkehr
  • Apache/Mail/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix bietet auch eine Konfiguration für Warnmeldungen, sodass Sie benachrichtigt werden, wenn etwas nicht stimmt. Es ist eine gute Wahl, wenn Sie Cloud-basierte Server verwalten und nach einer proaktiven Überwachungslösung suchen.

Netdata

Netdata ist ein Echtzeit-Leistungsüberwachungstool für Systemressourcen, Anwendungen, Webserver, Datenbanken, DNS, E-Mail, Hardwaresensoren und vieles mehr. Es ist Open Source und einfach einzurichten. Alle Daten werden erfasst, gespeichert und gestreamt, damit Sie sie interaktiv visualisieren können. Die Datenerfassung erfolgt jede Sekunde, sodass Sie nichts verpassen.

Netdata wird von vielen Branchenführern genutzt.

Worauf warten Sie noch? Übernehmen Sie die Kontrolle über Ihre Linux-Server!

btop

btop ist ein praktischer, vollständig interaktiver Ressourcenmonitor mit einer ansprechenden Benutzeroberfläche, der Sie bei der Verwaltung von Linux-Servern unterstützt.

Sie können Prozesse einfach in einer Baumansicht anzeigen, die Prozessliste filtern und Ressourcenfresser identifizieren. btop bietet auch ein automatisch skalierendes Diagramm, das die Netzwerknutzung darstellt.

Darüber hinaus können Sie die Festplattengeschwindigkeit überprüfen und die E/A-Aktivität verfolgen.

Es gibt noch viel mehr zu entdecken, auch auf Linux, FreeBSD und macOS.

Fazit

Ich hoffe, die genannten Tools helfen Ihnen dabei, die Serverauslastung in Echtzeit zu visualisieren, damit Sie die notwendigen Maßnahmen ergreifen können. Wenn Sie gerade erst als Systemadministrator anfangen und praktische Schulungen suchen, sollten Sie sich diesen Udemy-Kurs ansehen.