Obtenir des statistiques de processeur par thread

17

Je suis intéressé par l'utilisation actuelle de cpu - précisément cpu% et wait% - pour chaque thread dans une application spécifique. Est-il possible d'obtenir ces informations quelque part?

Je sais que cela toppeut diviser les informations par vrai thread (ceux avec pid), mais cela ne montre pas la répartition d'utilisation du processeur système / utilisateur / attente pour chacun d'eux. J'aimerais également trouver un moyen de consigner ces informations. Connaissez-vous des applications (ou des API) qui peuvent le faire?

viraptor
la source

Réponses:

4

Je regarde dans SystemTap . Cet outil vous donnera certainement ce que vous voulez. Il y a cet exemple de profilage de threads; Je ne sais pas s'il a tout ce que vous voulez, mais vous pouvez le modifier pour qu'il le fasse.

Mei
la source
14
top -H -p pid 

j'espère que cela peut aider

liu bluse
la source
12

Pourcentage d'utilisation du processeur par thread que vous pouvez obtenir avec la pscommande:

 ps -emo %cpu,pid,user,args

La façon dont il est calculé est décrite dans ps manpage:

Actuellement, c'est le temps CPU utilisé divisé par le temps d'exécution du processus (rapport cputime / temps réel), exprimé en pourcentage.

lexsys
la source
Je suis vraiment intéressé par le temps CPU et le temps d'attente io. ps ne peut malheureusement pas gérer le second.
viraptor
note à soi: remplacer -e par -C java et pid par spid pour les identifiants de thread dans l'application java
kellogs
2
une plus grande note à soi-même: ps -To pcpu,tid -C java | sort -r -k1 | morepour les fils de porc dans une application java. ps --sort=pcpun'obtient rien; mieux compter sur shell pour la partie tri.
kellogs
@Kellogs très utile, merci. Je voudrais ajouter -nou -gtrier, de sorte que "10" apparaisse au-dessus de "2", par exemple.
EM0
0

Peut-être jetez un œil à htop, vous pouvez en configurer beaucoup avec lui.

Sven
la source
malheureusement, il ne peut pas diviser le processeur sur l'utilisateur / le système / le temps d'attente pour un thread spécifique - uniquement pour la machine entière
viraptor
Oui, mais comment pourrais-je procéder?
rmobis
0

Avez-vous essayé Sar? Il peut récupérer de nombreuses informations même au niveau pid.


la source
0

J'ai trébuché là-dessus sur un système embarqué où nous n'avons pas les outils sophistiqués pour examiner ce genre de choses.

Pour cela, j'ai utilisé cpuacct cgroupet placé chaque fil dans son propre dossier. De cette façon, j'ai pu mesurer leur utilisation.

La hiérarchie ressemblait à ceci:

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

Ensuite, je l'ai changé en

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