Obtendo uma estatística de CPU por thread

17

Estou interessado no uso atual da CPU - precisamente CPU% e espera% - para cada thread em um aplicativo específico. É possível obter essas informações de algum lugar?

Eu sei que toppode dividir informações por thread real (aquelas com pid), mas não mostra o uso do sistema / usuário / espera da CPU dividido para cada um deles. Eu também gostaria de alguma maneira de registrar essas informações. Você conhece algum aplicativo (ou API) que possa fazer isso?

viraptor
fonte

Respostas:

4

Eu procuraria no SystemTap . Essa ferramenta certamente dará o que você deseja. Há este exemplo de threads de criação de perfil; não sei se ele tem tudo o que você deseja, mas você pode modificá-lo para que ele tenha.

Mei
fonte
14
top -H -p pid 

espero que possa ajudar

liu bluse
fonte
11

Porcentagem de uso da CPU por thread que você pode obter com o pscomando:

 ps -emo %cpu,pid,user,args

A maneira como é calculada é descrita em ps manpage:

Atualmente, é o tempo de CPU usado dividido pelo tempo em que o processo está em execução (proporção cputime / realtime), expresso em porcentagem.

lexsys
fonte
Estou realmente interessado no tempo da CPU e no tempo de espera por io. ps não pode lidar com o segundo, infelizmente.
viraptor
note to self: substitua -e por -C java e pid by spid para IDs de threads no aplicativo java
kellogs
2
maior nota para si próprio: ps -To pcpu,tid -C java | sort -r -k1 | morepara tópicos de suínos em um aplicativo java. ps --sort=pcpunão alcança nada; melhor confiar no shell para a parte de classificação.
Kellogs
Muito útil @kellogs, obrigado. Eu adicionaria -nou -gclassificaria para que "10" apareça acima de "2", por exemplo.
EM0
0

Talvez dê uma olhada no htop, você pode configurar bastante com ele.

Sven
fonte
infelizmente, não pode dividir o cpu em usuário / sistema / tempo de espera para uma linha específica - apenas para a máquina inteira
viraptor
Sim, mas como eu faria isso?
Rmobis
0

Você tentou sar? Ele pode buscar muitas informações, mesmo no nível pid.


fonte
0

Eu me deparei com isso em um sistema incorporado, onde não temos as ferramentas sofisticadas para analisar essas coisas.

Para isso, usei cpuacct cgroupe coloquei cada thread em sua própria pasta. Dessa forma, eu pude medir o uso deles.

A hierarquia estava assim:

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

Então eu mudei para

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