2009-04-29 3 views
17

Ich versuche, die Ursache für Leistungsengpässe in einer Anwendung zu finden, die ich unter Linux debuggen. Die verschiedenen involvierten Prozesse scheinen einen Großteil ihrer Zeit damit zu verschwenden, E/A-Anfragen zu blockieren, und ich fragte mich, ob jemand Linux-Tricks kannte, mit denen man sehen konnte, warum ein bestimmter Prozess blockiert ist/auf welche Ressource er wartet? Gibt es etwas Nützliches in /proc zum Beispiel?Wie kann ich feststellen, auf was ein Linux-Prozess wartet?

Antwort

13

Unabhängig von dem Prozess verwenden Sie top, um den Status zu überprüfen. Dann könnten Sie es durch,laufen lassen. Das sollte detailliert beschreiben, was vor sich geht. Wenn das nicht möglich ist, haken Sie es bis gdb. Werkzeuge wie iostat können Ihnen im Allgemeinen zeigen, was vor sich geht (z. B. wenn der Datenträger ein Flaschenhals ist).

7

Sie könnten den Befehl strace verwenden, um zu sehen, was Ihr Prozess vorhat. Sie können es auch nützlich finden, lsof auf Ihrem Prozess auszuführen, um zu sehen, welche Dateien und Sockets es verwendet.

6

strace ist dein Freund, weil du die Zeit für jeden Systemaufruf nutzen kannst. Außerdem kannst du die Dateideskriptoren und den Systemaufruf auswählen, an denen du interessiert bist. Aber du kannst auch Unterstützung vom Kernel bekommen: schau dir an latencytop