So finden Sie die Prozesse, die den Rechner blockieren

So finden Sie die Prozesse, die den Rechner blockieren

Szenario: Auf einmal fühlt sich mein Computer träge an. Die Maus bewegt sich, aber das Öffnen von Fenstern dauert ewig usw. Die Anzeige uptimezeigt, dass die Auslastung 7,69 beträgt und weiter zunimmt.

Wie lässt sich am schnellsten herausfinden, welcher/welche Prozess(e) die Ursache für die Belastung ist/sind?

Nun, "top" und ähnliche Tools sind nicht die Antwort, da sie entweder die CPU- oder die Speicherauslastung anzeigen, aber nicht beides gleichzeitig. Was ich brauche, ist der einzelne Befehl, den ich möglicherweise eingeben kann, während er passiert - etwas, das alle

Das System versucht, 8 GB RAM auf die Festplatte auszulagern, weil Prozess X ...

oder

Prozess X durchsucht die gesamte Festplatte

oder

Prozess X nutzt 400 % der CPU"

Ich suche also nach einem Tool, das mit iostat, htop/atop und ähnlichen Tools in einem Programm mit einer Ausgabe wie dieser zusammenläuft:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

Ich möchte kein Tool, das mir irgendwelche Zahlen liefert, die ich analysieren kann, sondern ein Tool, das mir genau sagt, welcher Prozess die aktuelle Auslastung verursacht. Gehen wir davon aus, dass der Benutzer vor der Tastatur kaum weiß, wie man „Prozess“ schreibt, aber bei „Resident Size“, „Virtueller Speicher“ oder „Prozesslebenszyklus“ ist er schnell überfordert.

Meine Argumentation geht so: Ein Benutzer bemerkt ein Problem. Dafür kann es tausende Gründe geben ... na ja, fast :-) Der Benutzer möchte die Ursache des Problems wissen.

Die aktuellen Lösungen liefern mir viele Zahlen und ich muss wissen, was diese Zahlen bedeuten. Ich suche nach einem Metatool. 99 % der Daten sind für das Problem irrelevant. Das Tool sollte also nach Prozessen suchen, die Ressourcen verbrauchen, und nur diese auflisten, zusammen mit „dieser Prozess benötigt viel CPU, dies erzeugt viele IRQs, dieser Prozess belegt viel RAM (und dieser wächst immer noch)“.

Dies wird eine relativ kurze Liste. Für jemanden, der sich damit nicht auskennt, wird es viel einfacher sein, den Übeltäter anhand dieser Liste zu finden, als anhand der Ausgabe von beispielsweise: , htopdie mir etwa 5000 Zahlen liefert, von mir aber verlangt, dass ich selbst Multithread-Prozesse zusammenstelle (ich habe 50 Zeilen, die sagen, VIRT 2750Maber nur 16 GB RAM - die Maschine sollte sich selbst tot tauschen, aber das ist natürlich eine Fehlinterpretation der Daten, die schnell passieren kann).

Antwort1

Ich muss über die Antworten schmunzeln, denn in jeder Antwort wurde Ihnen gesagt, Sie sollten das Tool X ausführen. Das einzige Problem ist, dass es keine Möglichkeit gibt, etwas zu korrelieren, wenn das, was Sie sehen, nur zeitweise auftritt. Ein Tool wiesarkann helfen, wenn man es mit einer ausreichend hohen Frequenz laufen lässt, aber ich würde behauptensammelnist noch besser.

Wiesar, führen Sie es als Daemon aus, indem Sie das RPM installieren und ausführen /etc/init.d/collectl start.

Wenn Sie jetzt etwas Langsames bemerken, collectl -p /var/log/collectl/filename --topwerden die Daten wiedergegeben und Ihnen die wichtigsten Prozesse angezeigt. Sie hätten collectl --topsie auch einfach ausführen und in Echtzeit sehen können. Übrigens – alles, was Sie in Echtzeit tun können, können Sie auch wiedergeben.

Was die CPU-Auslastung betrifft: Was passiert, wenn Sie durch Interrupts überlastet werden? collectl -sCzeigt nicht nur die Auslastung einzelner CPUs (oder die Verwendung -scfür die durchschnittliche Auslastung), sondern auch, wie sie ihre Zeit verbringen. Fügen Sie -j( -scj) ein, und Sie sehen die Anzahl der Interrupts/CPUs. Verwenden Sie Großbuchstaben -J, und Sie sehen die TYPEN der einzelnen Interrupts/CPUs.

Wenn Sie vmstat wirklich mögen, können Sie natürlich jederzeit Collectl-Daten wiedergeben --vmstatund es werden historische Daten im vmstat-Format angezeigt.

Es gibt weitaus mehr Schalter, als ich hier auflisten kann, aber Sie können sie hier nachlesen:QuelleForgeoder einfach googlen.

Antwort2

"top" funktioniert einigermaßen gut, solange Sie sich die richtigen Zahlen ansehen. Mal sehen:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Wenn das System jetzt langsam ist, weil die CPU vollständig belegt ist, wird dies in den Spalten „us“ und „sy“ in der Zeile „Cpu(s):“ angezeigt, deren Gesamtauslastung bei fast 100 % liegt.

Wenn es aufgrund von Swapping langsam ist, zeigt „Mem:“ „free“ sehr niedrige Werte und „Swap:“ „used“ hohe Werte an.

Wenn es langsam ist aufgrund vonE/Aim Allgemeinen gibt „Cpu(s):“ „wa“ an, wie viel Zeit für die E/A-Wartezeit aufgewendet wird.

Wenn Sie nun wissen, dass I/O-Wartezeiten das Problem sind, können Sie das Programm „iotop“ verwenden, um herauszufinden, welche Prozesse die meisten I/O-Vorgänge verursachen.

Antwort3

Aufgrund der Auslastung von 400 % gehe ich davon aus, dass Sie einen Quad-Core-Prozessor haben. Ihre durchschnittliche Auslastung ist fast doppelt so hoch und die Hälfte der Prozesse wartet auf die CPU.

Stellen Sie zunächst reniceIhre Shell auf 0 oder -10, um ein reaktionsfähigeres System zu erhalten, und verwenden Sie dann, htopum den/die fehlerhaften Prozess(e) zu finden und diesen mit straceeinem bestimmten Prozess zu verfolgen. Andere Tools, die nützlich sein könnten, sind:

  • vmsat
  • sar
  • iostat
  • pmap

Antwort4

vmstat könnte Ihnen allgemein weiterhelfen. Ein Anwendungsbeispiel ist:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Sie können es auch alle X Sekunden ausführen – fügen Sie einfach die Zahl X nach dem Befehl hinzu.

Bearbeiten: Im Hinblick auf den Kommentar ... Schreiben Sie das Folgende in eine Datei und machen Sie diese Datei ausführbar. Dadurch werden Ihnen die drei wichtigsten Prozesse auf dem Computer angezeigt.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Wenn Sie wissen möchten, was im Gegensatz zur CPU den Speicher beansprucht, lesen Sie die oberste Manpage und ändern Sie die Anzeigereihenfolge.

verwandte Informationen