Ottenere statistiche cpu per thread


17

Sono interessato all'utilizzo corrente di cpu - precisamente cpu% e wait% - per ogni thread in un'applicazione specifica. È possibile ottenere tali informazioni da qualche parte?

lo so top può dividere le informazioni per thread reali (quelli con pid), ma non mostra la suddivisione dell'utilizzo della cpu di sistema / utente / attesa per ciascuno di essi. Vorrei anche un modo per registrare tali informazioni. Conosci qualche app (o API) in grado di farlo?

Risposte:


4

Mi piacerebbe guardare in SystemTap . Questo strumento ti darà sicuramente quello che vuoi. C'è questo esempio di thread di profilazione; non so se ha tutto quello che vuoi, ma puoi modificarlo in modo che lo faccia.



11

Percentuale di utilizzo della cpu per thread che puoi ottenere con il pscomando:

 ps -emo %cpu,pid,user,args

Il modo in cui viene calcolato è descritto in ps manpage:

Attualmente, è il tempo di CPU utilizzato diviso per il tempo di esecuzione del processo (rapporto cputime / tempo reale), espresso in percentuale.


Sono davvero interessato sia al tempo della CPU che al tempo di attesa. ps non può gestire il secondo purtroppo.
viraptor,

nota a se stesso: sostituisci -e con -C java e pid con spid per gli ID thread nell'app java
kellogs

2
maggiore nota di sé: ps -To pcpu,tid -C java | sort -r -k1 | moreper i thread hog in un'app java. ps --sort=pcpunon ottiene nulla; fare meglio affidamento sulla shell per la parte di smistamento.
Kellogs,

@Kellogs molto utile, grazie. Vorrei aggiungere -no -gordinare, in modo che "10" venga visualizzato sopra "2", ad esempio.
EM0

0

Forse dai un'occhiata a htop, puoi configurarlo abbastanza con esso.


sfortunatamente non può dividere la cpu su utente / sistema / tempo di attesa per un thread specifico - solo per l'intera macchina
viraptor

Sì, ma come potrei farlo?
rmobis,

0

Hai provato sar? Può recuperare molte informazioni anche a livello di pid.



0

Mi sono imbattuto in questo su un sistema incorporato in cui non abbiamo gli strumenti fantasiosi per esaminare queste cose.

Per questo, ho usato cpuacct cgroup e inserito ogni thread nella sua cartella. In questo modo sono stato in grado di misurare il loro utilizzo.

La Gerarchia era così:

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

Quindi l'ho cambiato in

my-app.service
|-dir1
|  -tid1
|-dir2
|  -tid2
|-dir3
|  -tid3
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.