Wie kann ich herausfinden, ob ein Prozess an CPU, Speicher oder Festplatte gebunden ist?

42

Wie kann ich herausfinden, ob ein Prozess an CPU, Speicher oder Festplatte gebunden ist?

ssanj
quelle
Wenn Sie eine Gnome-GUI verwenden, können Sie das Systemmonitor-Applet zu Ihrem Panel hinzufügen. In den Einstellungen können Sie festlegen, dass Zyklen, die für IO-Wait verloren gegangen sind, als weiß angezeigt werden, und die Diagramme für Speicher, CPU und Festplatten-Lese- / Schreibzugriff festlegen, die angezeigt werden sollen. Normalerweise ändere ich die Standard-Grafikfarben, um die Unterscheidung zwischen Benutzer- / Betriebssystemspeicher und Lese- / Schreibzugriff auf die Festplatte zu erleichtern. Es ist keine echte Lösung, aber es ist praktisch, neben allen in den Antworten genannten Tools zu haben.
Jeremy
1
@ Luis-Alvarado Ich würde nicht zustimmen, dass diese Frage nicht nützlich ist, obwohl ich behaupten würde, dass dies besser zu StackOverflow oder dergleichen passt. Ich bin auf der Suche nach einer Lösung hergekommen.
Skeggse
Das Problem bei der gestellten Frage ist, dass die Ausführungsumgebung nicht berücksichtigt wird. Welche Methode zur Ermittlung des Host-Komponenten-Engpasses eines Jobs / Prozesses am effektivsten ist, hängt eng mit der Laufzeit, der Ausführungsumgebung, dem Host-Betriebssystem, der Hardware usw. des Jobs zusammen und welchen Tools die einzelnen Komponenten zur Überprüfung zur Verfügung stehen. Einige Laufzeiten (z. B. die Erlang-Laufzeitumgebung oder die JVM von IBM) verfügen über umfassende Tools, die sich über die gesamte Umgebung erstrecken. Bei anderen fehlen die Tools vollständig. kann es dir zeigen.
zxq9

Antworten:

19

Das erfordert etwas Voodoo. Es hängt davon ab, ob. Beispiel:

  • Wenn genügend Arbeitsspeicher vorhanden ist und die Festplatten nicht überlastet zu sein scheinen, ist sie möglicherweise CPU-gebunden. Schauen Sie sich die CPU-Auslastung an, und wenn sie bei 100% liegt, ist sie CPU-gebunden. Ist dies nicht der Fall, liegt ein künstlicher Engpass in der Implementierung vor. Beispiel: Auf einer Dual-Core-CPU übersteigt ein Single-Thread-Prozess nicht 50% der CPU-Auslastung.

  • Wenn CPU und Arbeitsspeicher verfügbar sind, die Festplatten jedoch stark ausgelastet sind oder die E / A-Latenzzeit hoch erscheint, ist es wahrscheinlich, dass die E / A gebunden ist. Überprüfen Sie, ob das Hinzufügen weiterer Festplatten (RAID?) Hilfreich ist.

  • Nichts des oben Genannten? Überprüfen Sie den verfügbaren Speicher.

  • Genug Gedächtnis? Möglicherweise liegt ein künstlicher Engpass im Prozess selbst vor, dh, jemand hat vergessen, den Schlaf zu entfernen (1). Naah es ist normalerweise nicht so einfach. ;)

Es gibt einen Grund, warum wir in den meisten Unternehmen, die sich mit leistungsempfindlichen Produkten beschäftigen, ein ganzes Labor für Performance-Ingenieure haben!

Verwenden Sie Tools wie sar, vmstat, iostat, oprofile, lockstat, dtrace, produktspezifische Tools zur Leistungsüberwachung usw., um Leistungsprobleme zu beheben.

Sudhanshu
quelle
2
Gibt es ein Werkzeug, das all dies zusammenhält?
ssanj
normalerweise nein, aber wenn dtrace auf Ihrem System verfügbar ist (Solaris / FreeBSD / Mac OS X?), können Sie damit weiterkommen.
Sudhanshu
Ich habe gerade daran gedacht, dass es Systemtap unter Linux gibt (ähnlich wie dtrace), außer ich bin mir nicht sicher, ob das Tool ausgereift ist.
Sudhanshu
vmstat ist nützlich.
James
12

check out iotop, kann nützlich sein

ithkuil
quelle
iotop wurde nicht standardmäßig in redhat
Mona Jalal
9

Ein Tool, mit dem Sie in Echtzeit eine Reihe von Prozessstatistiken (Speicher, CPU-Auslastung, E / A usw.) überprüfen können, ist htop . Es ersetzt nicht die spezialisierteren Werkzeuge von Sudhanshu, könnte aber ein guter Anfang sein.

JanC
quelle
4

Führen Sie neben den anderen genannten Tools ps l PIDdas Programm aus, fügen Sie die entsprechende Prozess-ID ein, oder sehen Sie sich die Spalten STATE und WCHAN in top oder htop an.

Wenn es sich im Status D (für Datenträger) befindet, wird Datei-E / A ausgeführt. Dies kann daran liegen, dass entweder viele Dateien gelesen werden oder dass viel Speicher und Auslagerungen verwendet werden. In der Spalte WCHAN sehen Sie, welche Kernelfunktion darin enthalten ist. Wenn Sie nach ihnen googeln oder hier fragen, erhalten Sie möglicherweise einen Hinweis darauf, was sie bedeuten.

Wenn es sich im Status R (run) befindet, wird die CPU im Benutzerbereich verwendet, d. H., Sie ist in diesem Moment an die CPU gebunden.

Wenn es sich im Status S (Ruhezustand) befindet, befindet es sich innerhalb eines unterbrechbaren Systemaufrufs, was bedeuten kann, dass es entweder tatsächlich schläft oder auf Netzwerkverkehr oder eine Sperre wartet. Nochmals, ein Blick auf das jeweilige Wchan verrät Ihnen mehr.

Siehe auch Was ist der "Wartekanal" eines Prozesses?

Poolie
quelle
2

Führen Sie topdie CPU-Nutzungslinie aus und überprüfen Sie sie. Ein hoher Benutzer% gibt an, dass die CPU gebunden ist. Eine hohe Wartezeit von% zeigt an, dass es sich um eine E / A-Bindung handelt.

Psusi
quelle