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?

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.



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.


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.


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.



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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.