So finden Sie die Prozesse, die die Maschine belasten

10

Szenario: Plötzlich fühlt sich mein Computer träge an. Die Maus bewegt sich, aber das Öffnen der Fenster dauert ewig usw. uptimeDie Last beträgt 7,69 und hebt sich.

Was ist der schnellste Weg, um herauszufinden, welche Prozesse die Ursache für die Belastung sind?

Jetzt sind "top" und ähnliche Tools nicht die Antwort, da sie entweder die CPU- oder die Speichernutzung anzeigen, aber nicht beide gleichzeitig. Was ich brauche, ist der einzelne Befehl, den ich möglicherweise eingeben kann, wenn er passiert - etwas, das alles herausfinden wird

Das System versucht, 8 GB RAM auf die Festplatte zu übertragen, da Prozess X ...

oder

Prozess X sucht auf der gesamten Festplatte

oder

Prozess X verwendet 400% CPU "

Was ich also suche, ist, dass iostat, htop / atop und ähnliche Tools mit einer Ausgabe wie dieser in einem ausgeführt werden:

 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 einige Zahlen gibt, die ich analysieren kann, sondern ein Tool, das mir genau sagt, welcher Prozess die aktuelle Last verursacht. Angenommen, der Benutzer vor der Tastatur weiß kaum, wie man "Prozess" schreibt, aber der Benutzer ist schnell überfordert, wenn es um "residente Größe", "virtuellen Speicher" oder "Prozesslebenszyklus" geht.

Mein Argument lautet wie folgt: Ein Benutzer bemerkt ein Problem. Es kann Tausende von Gründen geben ... na ja, fast :-) Der Benutzer möchte die Ursache des Problems wissen.

Die aktuellen Lösungen geben mir viele Zahlen, und ich muss wissen, was diese Zahlen bedeuten. Was ich suche, ist ein Meta-Tool. 99% der Daten sind für das Problem irrelevant. Das Tool sollte also nach Prozessen suchen, die einige Ressourcen beanspruchen, und nur diejenigen auflisten, zusammen mit "Dieser Prozess benötigt viel CPU, dies erzeugt viele IRQs, dieser Prozess weist viel RAM zu (und er wächst immer noch)".

Dies wird eine relativ kurze Liste sein. Es wird für jemanden, der neu in diesem Bereich ist, viel einfacher sein, den Schuldigen aus dieser Liste zu finden, als beispielsweise aus der Ausgabe von, htopdie mir ungefähr 5000 Zahlen gibt, aber erfordert, dass ich selbst Multithread-Prozesse falte (ich habe 50 Zeilen, die VIRT 2750Maber sagen nur 16 GB RAM - die Maschine sollte sich selbst zu Tode tauschen, aber dies ist natürlich eine Fehlinterpretation der Daten, die schnell passieren kann).

Aaron Digulla
quelle
Ich verstehe nicht warum. Die Symptome, die Sie beschreiben, sind nicht die eines Festplattenmülls (würden die Maus nicht betreffen). Die träge Maus ist eine klassische CPU mit voller Kapazität.
Soandos
1
Dies ist nur ein Beispiel. Bitte nehmen Sie es mit einem Körnchen Salz. Stellen Sie sich vor, ein Noob sitzt vor dem Computer und weiß nichts. Wie kann er am einfachsten herausfinden, was los ist (dh ohne eine halbe Stunde damit zu verbringen, zu googeln, was die Ausgabe topbedeutet)
Aaron Digulla
Suchen Sie ein Linux-Äquivalent zum Task-Manager mit einer GUI und allem oder etwas anderem?
Soandos
Ich suche nach etwas, das ich ausführe und das besagt, dass "Prozess X die Maschine belastet".
Aaron Digulla

Antworten:

3

Ich muss über die Antworten lächeln, weil jeder Ihnen gesagt hat, dass Sie Tool X ausführen sollen. Das einzige Problem ist, dass es keine Möglichkeit gibt, irgendetwas zu korrelieren, wenn das, was Sie sehen, zeitweise ist. Ein Tool wie sar kann helfen, wenn Sie es mit einer ausreichend hohen Frequenz ausführen , aber ich würde behaupten, Collectl ist noch besser.

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

Wenn Sie jetzt etwas Träge sehen, collectl -p /var/log/collectl/filename --topwerden die Daten wiedergegeben und die wichtigsten Prozesse angezeigt. Sie hätten auch einfach laufen collectl --topund sie in Echtzeit sehen können. Übrigens - alles, was Sie in Echtzeit tun können, können Sie auch wiedergeben.

Was ist mit der CPU-Auslastung, wenn Sie mit Interrupts überlastet werden? collectl -sCzeigt nicht nur die -scAuslastung einzelner CPUs (oder die Verwendung für die durchschnittliche Auslastung), sondern auch, wie sie ihre Zeit verbringen. Include -j( -scj) und Sie sehen die Anzahl der Interrupts / CPU. -JWenn Sie Großbuchstaben verwenden , werden die TYPEN der einzelnen Interrupts / CPUs angezeigt.

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

Es gibt weit mehr Schalter, als ich auflisten kann, aber Sie können sie bei SourceForge überprüfen oder einfach googeln.

Mark Seger
quelle
Vielen Dank; Das ist nicht genau das, wonach ich gesucht habe, aber es ist zumindest ein guter Ausgangspunkt.
Aaron Digulla
Fantastisches Werkzeug! Und unter Ubuntu (mindestens seit 12.04) müssen Sie nur das Paket installieren - es startet den Daemon automatisch bei der Installation und beim Neustart danach :)
nealmcb
6

"top" funktioniert ziemlich gut, solange Sie sich die richtigen Zahlen ansehen. Wir werden 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 langsam ist, weil die CPU voll ist, werden die Spalten "us" und "sy" in der Zeile "Cpu (s):" angezeigt, die nahezu 100% zusammen liegen.

Wenn es aufgrund des Austauschs langsam ist, zeigt "Mem:" "free" sehr niedrige Werte und "Swap:" "verwendete" hohe Werte.

Wenn es aufgrund von E / A im Allgemeinen langsam ist , gibt "Cpu (s):" "wa" an, dass Zeit für das Warten auf E / A aufgewendet wird.

Wenn Sie nun wissen, dass E / A-Wartezeiten das Problem sind, können Sie mit den Programmen "iotop" ermitteln, welche Prozesse die meisten E / A-Vorgänge erstellen.

Zds
quelle
+1 Aber ich bin eher auf der Suche nach einem Tool, das diese Analyse für mich durchführt und den Prozess zusammen mit einigen Informationen druckt, was falsch ist. Ich möchte das nicht aus den "rohen" Zahlen entnehmen. Etwas?
Aaron Digulla
1
Es tut mir leid, aber Sie können Probleme wie die Langsamkeit der Maschine nicht lösen, ohne den Unterschied zwischen verschiedenen Arten der Langsamkeit zu verstehen. Wenn solche Werkzeuge existieren, weiß ich nichts darüber; Höchstwahrscheinlich benötigen Sie einen fähigen Computeradministrator / Servicetechniker.
Zds
Es wäre schön, wenn es ein solches Tool gäbe, denn es ist sicherlich möglich, dies automatisch zu bestimmen: Wenn ich anhand der Ausgabe von erkennen kann top, kann dies auch ein Computer. Dies ist nicht Mona Lisas Lächeln, es sind nur einige Zahlen, um "schlechte" zu finden.
Aaron Digulla
2

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

Stellen reniceSie zuerst Ihre Shell auf 0 oder -10, um ein reaktionsfähigeres System zu erhalten, und verwenden Sie dann htop, um die fehlerhaften Prozesse zu finden, und folgen Sie diesen mit straceeinem bestimmten Prozess. Andere Werkzeuge, die nützlich sein könnten, sind:

  • vmsat
  • sar
  • iostat
  • pmap
Terpion
quelle
1

Eine träge Maus kann auch auf eine zu hohe Interruptlast zurückzuführen sein oder darauf, dass USB-Controller sehr beschäftigt sind (ich nehme an, es handelt sich um eine USB-Maus).

Bruce ONeel
quelle
Gibt es Tools, die mir mitteilen, welcher Treiber / welche Komponente die hohe IRQ-Last verursacht?
Aaron Digulla
1

vmstat könnte Ihnen allgemein helfen. 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 Nummer X nach dem Befehl hinzu.

Bearbeiten: Im Hinblick auf einen Kommentar ... Schreiben Sie Folgendes in eine Datei und machen Sie diese Datei ausführbar. Hier erfahren Sie die drei wichtigsten Prozesse auf der Maschine.

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

Wenn Sie wissen möchten, welcher Speicher im Gegensatz zur CPU überlastet ist, lesen Sie die oberste Manpage und ändern Sie die Reihenfolge der Anzeige.

Sardathrion - gegen SE-Missbrauch
quelle
Ich suche etwas höheres Niveau. Es sollte vmstat ausführen und die Zahlen für mich analysieren, damit ich nicht wissen muss, was "cs" bedeutet und ob ein großes "cs" "gut" oder "schlecht" ist.
Aaron Digulla