Abrufen einer CPU-Statistik pro Thread

17

Ich interessiere mich für die aktuelle Verwendung von CPU - genau CPU% und Wait% - für jeden Thread in einer bestimmten Anwendung. Ist es möglich, diese Informationen von irgendwoher zu bekommen?

Ich weiß, dass topInformationen pro realem Thread aufgeteilt werden können (solche mit PID), aber es wird nicht die Aufteilung der System- / Benutzer- / Warte-CPU-Auslastung für jeden von ihnen angezeigt. Ich möchte auch eine Möglichkeit, diese Informationen zu protokollieren. Kennen Sie Apps (oder APIs), die das können?

viraptor
quelle

Antworten:

4

Ich würde in SystemTap suchen . Dieses Tool wird Ihnen mit Sicherheit das geben, was Sie wollen. Es gibt dieses Beispiel für die Profilerstellung von Threads. Ich weiß nicht, ob es alles hat, was Sie wollen, aber Sie können es ändern, damit es funktioniert.

Mei
quelle
13
top -H -p pid 

hoffe es kann helfen

liu bluse
quelle
11

Prozentsatz der CPU-Auslastung pro Thread, die Sie mit dem psBefehl abrufen können :

 ps -emo %cpu,pid,user,args

Die Art und Weise, wie es berechnet wird, ist beschrieben in ps manpage:

Derzeit wird die verwendete CPU-Zeit geteilt durch die Laufzeit des Prozesses (Cputime / Realtime-Ratio) in Prozent ausgedrückt.

lexsys
quelle
Ich interessiere mich sehr sowohl für die CPU-Zeit als auch für die Io-Wait-Zeit. ps kann leider nicht mit dem zweiten umgehen.
Viraptor
note to self: Ersetze -e durch -C java und pid durch spid für Thread-IDs in Java-App
kellogs
2
Größere Anmerkung zu sich selbst: ps -To pcpu,tid -C java | sort -r -k1 | morefür Schweinefäden in einer Java-App. ps --sort=pcpuerreicht nichts; Verlassen Sie sich beim Sortieren besser auf die Shell.
Kellogs
Sehr nützliche @kellogs, danke. Ich würde hinzufügen -noder -gsortieren, so dass "10" zum Beispiel über "2" erscheint.
EM0
0

Vielleicht schau mal bei htop vorbei, du kannst ziemlich viel damit konfigurieren.

Sven
quelle
Leider kann die CPU auf Benutzer / System / Wartezeit für einen bestimmten Thread nicht aufgeteilt werden - nur für die gesamte Maschine
Viraptor
Ja, aber wie würde ich das machen?
RMOBIS
0

Hast du es mit sar versucht? Es kann eine Menge Informationen auch auf PID-Ebene abrufen.


quelle
0

Ich bin auf einem eingebetteten System darauf gestoßen, bei dem wir nicht über die ausgefallenen Tools verfügen, um in dieses Zeug hineinzuschauen.

Dafür habe ich cpuacct cgroupjeden Thread in einen eigenen Ordner gelegt und benutzt. Auf diese Weise konnte ich ihre Nutzung messen.

Die Hierarchie sah folgendermaßen aus:

my-app.service
|-tid1
|-tid2
|-tid3

Dann habe ich es geändert

my-app.service
|-dir1
|  -tid1
|-dir2
|  -tid2
|-dir3
|  -tid3
Umut
quelle