Wie kann ich herausfinden, ob ein Prozess an CPU, Speicher oder Festplatte gebunden ist?
Wie kann ich herausfinden, ob ein Prozess an CPU, Speicher oder Festplatte gebunden ist?
Antworten:
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.
Führen Sie neben den anderen genannten Tools ps l PID
das 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?