Wie man thread-CPU-Auslastung Kennzahlen in Redhat Linux
Ich brauche, um die CPU-Auslastung Metriken für alle threads in einem Prozess.
- Operating system = Redhat linux
- programming language = C++, POSIX
- Vorgaben = müssen Proben nehmen alle paar Sekunden indefinetly, nicht nur für eine Momentaufnahme in der Zeit.
- Einschränkungen = nicht erlaubt zu schreiben zusätzlichen code im thread
Ich weiß, Sie können verwenden Sie die "top" - Befehl, aber welche anderen Möglichkeiten gibt es? Gibt es ein flag für "ps"?
Vielen Dank im Voraus für Ihre Hilfe.
InformationsquelleAutor | 2009-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen Sie den Inhalt
/proc/[your PID]/stat
um Informationen für den gesamten Prozess, und wenn Sie einen 2.6 kernel gibt es auch/proc/[your PID]/task/[thread ID]/stat
mit den Informationen für die einzelnen threads. (siehe hier)Speziell, Sie finden diese zwei Felder:
Den problematischen Teil hier ist, in welcher Einheit die Werte angegeben. Ein ist ruckzuck 1/HZ Sekunden, wo HZ ist der kernel clock tick rate und die Bestimmung dieser Taktrate ist der harte Teil.
Wenn Sie diese nur für ein bestimmtes system, können Sie einfach ein paar tests machen oder betrachten Ihre kernel-Header und fest dieser Wert in Ihrem Programm. Wenn Sie wissen wollen, wie dieser zu ermitteln ist, in einer mehr Allgemeinen Art und Weise, können Sie sich, wie ein tool wie oben ist es durch betrachten der Quellcode (siehe
old_Hertz_hack()
Funktion und die damit verbundenen Kommentare)uname -r
| grep HZInformationsquelleAutor freak
Möglicherweise einen einfacheren Weg, dies zu tun ist die Verwendung getrusage mit dem linux-spezifische Erweiterung des
RUSAGE_THREAD
. Sobald Sie diese Zeiten, können Sie nur abziehen, die Zeiten haben Sie das Letzte mal abgetastet, und dividieren durch die Reale Zeit, die vergangen seit Ihrer letzten Probe. Die sagen Sie bekommen die CPU-Auslastung in Prozent an.Für linux-spezifische Dokumentation finden Sie in der rusage liunx Mann Seite.
InformationsquelleAutor Arvid
Können Sie in der Lage, dies zu tun mit gnu gprof die in Linux. Ich glaube, dass Sie Anspruch auf Unterstützung threading, aber dies ist komplizierter, als Profilierung auf der Ebene der Prozesse, so bekommen Sie vielleicht nicht die Ergebnisse, die Sie suchen.
Hier ein howto für Ihre situation.
InformationsquelleAutor Dana the Sane
kannst du mit "top" - Befehl, um die Prozess-Id zuerst.
Danach, Sie können den folgenden Befehl verwenden, um nur die Anzeige der CPU - /Speicherauslastung für den Prozess
Danach können Sie die Tasten "Shift"+"h" zu zeigen, die threads
InformationsquelleAutor Robin