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?

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.



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.


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.


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.



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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.