Sie sind hier:

Bash-Befehl top

.

Bash-Befehl top

2010-01-14 12:00 (Kommentare: 4)

Wie man sehen kann, was der Rechner grad so treibt? Teil 1

Unter Windows ist man es gewohnt den Task-Manager aufzurufen, um zu sehen wie hoch die CPU-Last gerade ist, welche Programme laufen oder auch nicht. Bei Linux gibt es solche Anzeigemöglichkeiten ebenfalls, sowohl grafisch als auch in der Konsole, deshalb beschäftigt sich der heutige Artikel mit dem Befehl top. Die grafische Anzeige lasse ich außen vor, dass sie von Distribution zu Distribution jeweils unterschiedlich sind.

Kurzer Schlenker: Was sind eigentlich Derivate und Distributionen und wo liegt der Unterschied? Der Begriff Derivat (lat. derivare - ableiten) klärt Abhängigkeiten und Zugehörigkeiten. So ist Ubuntu ein Debian-Derivat und Debian wiederum ein Linux-Derivat. Ubuntu baut also auf Debain auf, wohingegen Debian wieder auf Linux aufbaut. Der Begriff Distribution bedeutet ein Softwarepaket - im Linuxsinne ein Softwarepaket mit Linuxkernel - und deren Verteilung, somit sind sowohl Debian als auch Ubuntu Distributionen.

Nach diesem kurzen Schlenker geht es nun zurück zu dem Bash-Befehl top. Top listet die Prozesse, die derzeit laufen, auf und sortiert sie nach CPU-Auslastung. So ist das zumindest in der Standardeinstellung. Es ist aber auch möglich die Prozesse nach einem anderen Kriterium zu sortieren. Es kann also extrem hilfreich sein, wenn der Rechner hängt und man nicht weiß, welcher Prozess gerade die CPU frißt. Außerdem hat man so im Blick, welche Prozesse sowohl im Vordergrund als auch im Hintergrund laufen. Die Ausgabe aktualisiert sich, sobald ein Programm CPU in Anspruch nimmt.

top - 13:29:28 up 45 min,  2 users,  load average: 0.42, 0.16, 0.10
Tasks: 150 total, 1 running, 149 sleeping, 0 stopped, 0 zombie
Cpu(s): 40.1%us, 7.9%sy, 0.0%ni, 52.1%id,
Mem: 2061536k total, 1575876k used, 485660k free, 129624k buffers
Swap: 4104568k total, 0k used, 4104568k free, 585740k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2646 helena 20 0 518m 136m 32m S 52 6.8 12:55.84 firefox
1343 root 20 0 198m 154m 30m S 31 7.7 7:27.29 Xorg
2550 helena 20 0 238m 26m 18m S 8 1.3 1:43.56 kwin
2579 helena 20 0 164m 4644 3468 S 3 0.2 0:57.69 pulseaudio
2789 helena 20 0 150m 27m 16m S 3 1.4 0:10.51 konsole
2552 helena 20 0 327m 55m 25m S 2 2.7 0:19.20 plasma-desktop
 58 root 15 -5 0 0 0 S 0 0.0 0:03.14 kondemand/0
2502 helena 20 0 167m 18m 13m S 0 0.9 0:00.76 kded4
2990 helena 20 0 2472 1188 884 R 0 0.1 0:10.03 top
 1 root 20 0 2632 1532 1128 S 0 0.1 0:00.83 init
 2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
 3 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/0
 4 root 15 -5 0 0 0 S 0 0.0 0:00.03 ksoftirqd/0
 5 root RT -5 0 0 0 S 0 0.0 0:00.00 watchdog/0
 6 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/1
 7 root 15 -5 0 0 0 S 0 0.0 0:00.42 ksoftirqd/1
 8 root RT -5 0 0 0 S 0 0.0 0:00.00 watchdog/1
 9 root 15 -5 0 0 0 S 0 0.0 0:00.02 events/0
10 root 15 -5 0 0 0 S 0 0.0 0:00.09 events/1
11 root 15 -5 0 0 0 S 0 0.0 0:00.00 cpuset
12 root 15 -5 0 0 0 S 0 0.0 0:00.00 khelper
13 root 15 -5 0 0 0 S 0 0.0 0:00.00 netns
14 root 15 -5 0 0 0 S 0 0.0 0:00.00 async/mgr
15 root 15 -5 0 0 0 S 0 0.0 0:00.00 kintegrityd/0
16 root 15 -5 0 0 0 S 0 0.0 0:00.00 kintegrityd/1
17 root 15 -5 0 0 0 S 0 0.0 0:00.00 kblockd/0
18 root 15 -5 0 0 0 S 0 0.0 0:00.00 kblockd/1
19 root 15 -5 0 0 0 S 0 0.0 0:00.00 kacpid
20 root 15 -5 0 0 0 S 0 0.0 0:00.00 kacpi_notify
21 root 15 -5 0 0 0 S 0 0.0 0:00.00 kacpi_hotplug
22 root 15 -5 0 0 0 S 0 0.0 0:00.00 ata/0
23 root 15 -5 0 0 0 S 0 0.0 0:00.00 ata/1
24 root 15 -5 0 0 0 S 0 0.0 0:00.00 ata_aux
25 root 15 -5 0 0 0 S 0 0.0 0:00.00 ksuspend_usbd

Beginnend in der ersten Zeile sagt mir top zu erst, dass es aufgerufen wurde und zwar um 13:29:48 Uhr. Der Rechner ist zu dieser Zeit seit 45 Minuten an (up 45 min). Es sind zwei User angemeldet und der load average liegt bei 0,42 in der letzten Minute. Es wird also durchschnittlich knapp unter der Hälfte der zur Verfügung gestellten CPU gebraucht. Beim Wert 1 würde im Mittel die gesamte CPU verbraucht werden. Der Load Average ist also ein errechneter Durchschnittswert der Auslastung des Rechners. Der Zeitraum umfasst hierbei 1, 5 und 15 Minuten - der erste Wert ist der Durchschnittswert der letzten Minute (0,42), der zweite der letzten 5 Minuten (0,16) und der dritte Wert der letzten 15 Minuten (0,10).
Die zweite Zeile zeigt an, dass 150 Prozesse oder Jobs laufen (Tasks: 150 total), davon schlafen aber 149 (149 sleeping), nur einer wird gerade aktiv ausgeführt (1 running) und es gibt keine angehaltenen Prozesse oder Zombies (0 stopped, 0 Zombies). Ein Zombie-Prozess ist ein Prozess, der beendet ist und trotzdem noch in der Systemtabelle auftaucht. Er kann eine CPU-Belastung herbeiführen. Solche Prozesse können auf Fehler aufmerksam machen.

Cpu(s): 40.1%us,  7.9%sy,  0.0%ni, 52.1%id

Die dritte Zeile ist die CPU-Zeile. 40.1% der Prozesse sind vom User, also mir, gestartet worden (40,1%us), 7.9% vom System (7,9%sy), 0,0% der Prozesse laufen nicht mit einem Nice-Wert von O - das scheint sich aber nur auf die Userprozesse zu beziehen - 52,1% der CPU stehen noch zur Verfügung (52,1%id). Zu den Nice-Werten wird es einen eigenen Artikel geben.

Mem:   2061536k total,  1575876k used,   485660k free,   129624k buffers
Swap:  4104568k total,        0k used,  4104568k free,   585740k cached

Die vierte und fünte Zeile hingegen geben die Werte des RAMs (Mem) und der Swap-Partition (Swap) an. Mein Rechner besitzt also 2.061.536k RAM (knappe 2 Gigabyte RAM), davon werden 1.575.876k gebraucht (used), 485.660k sind noch frei (free). Gleiches nur mit anderen Werten gilt für die Swap-Zeile. Spannend sind in diesen beiden Zeilen die letzten Einträge (129.624k buffers, 585.740k cached). Das ist der Teil des Speichers der von Linux vorab benutzt wird, um dort Programmteile zu laden, die ich nach Vermutung des Betriebssystems vielleicht als nächstes gebrauchen könnte. Diese Programme sollen mir so schnellstmöglich zur Verfügung stehen.

Damit ist der erste Block der Ausgabe von top ausführlich erklärt. Nun folgt der nächste Teil der Ausgabe, die Auflistung der Programme mit weiteren Angaben.

PID    USER    PR  NI  VIRT  RES  SHR    S %CPU %MEM    TIME+  COMMAND 
2646 helena 20 0 518m 136m 32m S 52 6.8 12:55.84 firefox

Es beginnt mit der Prozessidentifikationsnummer (PID). Der Prozess Firefox hat also die PID 2646. Diese ID ist eindeutig und wird demnach nur an einen Prozess vergeben. Dies ist für bestimmte Fälle sehr wichtig, beispielsweise wenn man einen Prozess über die Konsole beenden will.
Danach folgt der User, der den Prozess gestartet hat. In diesem Fall ist das helena. Oben aufgeführt - der Bashauszug - sieht man auch, dass root die meisten Prozesse gestartet hat.
Es folgt die Priorität (PR) des Prozess. Hier hat er einen Wert von 20. Die Prozesspriorität kann aber einen Wert zwischen 0-139 annehmen. Der Bereich 0-99 umfasst die realtime-Prozesse (Echtzeit-Prozesse), wohingegen die Werte 100-139 die regulären Userprozessprioritäten sind. Die PR wird vom Betriebssystem vergeben und kann durch den Nice-Wert beeinflusst werden.
Firefox hat hier einen Nice-Wert (NI) von 0. Dieser Wert ist mittig in der Skala der Nice-Werte anzusiedeln, da die Ausprägung von -19 (sehr hohe Priorität) bis zu 20 (geringste Priorität) annehmen können. Der Nice-Wert eines Prozesses kann im laufenden Betieb geändert werden, dabei kann aber nur root einen negativen Nice-Werte vergeben.
518MB des virtuellen Speichers (Swap) werden von Firefox gebraucht (VIRT), 136 MB des physischen Speichers (RAM) benutzt das Programm ebenfalls (RES), sowie 32MB des geteilten Speichers (SHR). Der geteilte Speicher ist eine spezielle Form der Interprozesskommunikation; hierbei wird ein spezieller Teil des RAMs von mehreren Prozessen gebraucht.
Der Prozess Firefox schläft gerade. dass zeigt das S in der S-Spalte an (Status-Spalte). Prozesse können schlafen (S - sleep), ausgeführt wernden (R - running; de: laufen), gestoppt sein (T - trace; de: verfolgen), im ununterbrechbaren Schlaf liegen (D), oder sie sind ein Zombie-Prozess (Z - Zombie). Die meisten Prozesse schlafen, wenn man den top-Befehl aufruft. Da der running-Zeitraum immer nur Bruchtteile von Sekunde umfasst.
%CPU zeigt an wieviel % der CPU durch diesen Prozess gebraucht werden. In dem Moment als ich top aufgerufen habe, hat Firefox 52% der CPU verbraucht, was einen ganze Menge ist. Ich hatte Youtube laufen, rief soeben das Backend meiner Seite auf (also den Bereich in dem ich diesen Artikel gerade verfasse) und noch ein paar Suchanfragen zu bestimmten Begriffen. Firefox hatte also in diesem Moment wirklich viel zu tun.
Er hat aber nur 6,8% des RAMs gebraucht (%MEM). Es folgt die Startzeit des Programmes (TIME+) um 12:55.84 Uhr und dann unter COMMAND der Name des Programmes, nämlich Firefox.

Hiermit endet auch der Artikel zu dem Bashbefehl top. Ich denke, dass er wirklich ausführlich ist, falls aber noch Fragen bestehen, kann ich entweder die Manpage von top empfehlen oder die Kommentarfunktion.

Jetzt muss ich mich aber noch bei einigen Menschen bedanken. Ich dachte, der Artikel ist schnell geschrieben, aber wenn man dann dran sitzt, stellt man fest, dass vieles doch nicht so klar ist, wie man dachte. Also dank den Usern aus dem Ubuntuforum, die mir dabei geholfen haben, eine klare Trennung der Begrifflichkeiten Derivat und Distribution zu bekommen. Danke an Ruth_Shell, der meine Vermutung zum gepufferten und gecacheten RAM bzw. Swap bestätigte und mich darüber hinaus noch informierte zum Pre-Caching von Linux. Außerdem danke ich Xtra, der mir meine letzten Fragen bezüglich des VIRT, RES und SHR beantwortete und mich auf die Manpage verwies, die ich in dem ganzen Wust mittlerweile selbst vergessen hatte - Asche auf mein Haupt -, des Weiteren half er mir die Unterschiede zwischen Prozesspriorität (PR) und Prozesspriorität (NI) zu verstehen.

So weiter geht es morgen mit htop, es folgen noch ps und pstree.

Nachtrag: Der Befehl top wird mit Drücken der Taste q beendet oder durch die Betätigung der Tastenkombination Strg+c. Letztere Kombination kann jegliche Prozesse beenden, die im Vordergrund der Bash laufen.

Schlagwörter von diesem Beitrag

Zurück

Einen Kommentar schreiben

Kommentar von Dunkelangst | 2010-01-15

Sieh mal zu, dass du in einen Linux Planeten [1], [2], [3] rein rutscht. Außerdem finde ich die Heldenblogs [4], also auch einen Planeten, ganz interessant.Ansonsten fände ich das natürlich auch schön, wenn du langfristig nicht nur und ausschließlich über Linux bloggst.

Wie dem auch sei, dies ist jedenfalls wieder mal ein TOP Beitrag... ;-) (kleines Wortspiel). :-)

[1]: http://planet.ubuntuusers.de/
[2]: http://planet.debianforum.de/
[3]: http://www.rootforum.org/planet/
[4]: http://www.systemhelden.com/blogs.php

Kommentar von Helena | 2010-01-15

Hallo Dunkelangst,

danke für deinen Kommentar. Die Planeten sollte ich wirklich mal in Angriff nehmen.
Und was das Themenfeld dieses Blogs angeht, er wird das widerspiegeln, was mich begeistert, umtreibt und meine meiste Zeit frisst. Kurzum so wie bisher auch... ;)

Grüße Helena

Kommentar von Xtra | 2010-01-15

Eins moechte ich noch korrigieren, einen kleinen Verschreibsler.

"Die PID wird vom Betriebssystem vergeben und kann durch den Nice-Wert beeinflusst werden.
Firefox hat hier einen Nice-Wert (NI) von 0."

Richtig ist, die PID und PR werden vom System vergeben.
Jedoch aendert sich die PID (Process ID) NIE(!), da es quasi die "Hausnummer" des laufenden Prozesses ist.
Die PR(ioritaet) des Prozesses wird ebenfalls vom System vergeben, kann jedoch durch den NICE Wert beeinflusst werden (wenngleich nicht exakt vorgegeben).

Abschliessend moechte ich noch zu den Zombies sagen, dass diese auch auftreten koennen, wenn sich ein (unsauber programmierter) Elternprozess beendet hat, aber noch einen laufenden child hat. Es kann vorkommen, dass dann der elternprozess nicht aus der Tabelle verschwindet und init zum neuen parent des childs wird (wie es normalerweise sein sollte) sondern dass eben der Elternprozess solange als "zombie" gefyhrt wird, bis sich auch der child beendet. Klarheit kann hierbei "pstree" bringen, zu welchem du sicherlich auch bald kommen wirst. :)

Ansonsten ein sehr guter Artikel zu top.

Kommentar von Helena | 2010-01-15

Hallo Xtra,

ich habe den Verschreibsler im Text korrigiert. Bald wird es so weit sein, dass man die Korrekturen am Text auch sehen kann, also den Fehler und die Korrektur.

Vielen Dank, dass Du mich drauf hingewiesen hast.

zum Seitenanfang