Gostaria de monitorar o número de threads usados por um processo específico no Linux. Existe uma maneira fácil de obter essas informações sem afetar o desempenho do processo?
linux
multithreading
monitor
Fluxo
fonte
fonte
Respostas:
experimentar
ou htop
fonte
1
, porque imprime uma linha comoUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
para o cabeçalho da tabela.wc
quando você poderia apenasps -o thcount <pid>
? Veja esta resposta .Para obter o número de threads para um determinado pid:
Onde
nlwp
significa Número de processos leves (threads) . Assim,ps
aliasesnlwp
parathcount
, o que significa quetambém funciona.
Se você deseja monitorar a contagem de threads, basta usar
watch
:Para obter a soma de todos os threads em execução no sistema:
fonte
watch
comando. No entanto, observe que o usothcount
pode falhar para alguns (Red Hat ...), emboranlwp
funcionou para mim.Cada encadeamento em um processo cria um diretório em
/proc/<pid>/task
. Conte o número de diretórios e você terá o número de threads.fonte
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
. Apenas substitua o <PID> pelo seu ID do processo que você pode obtertop
ou usarps
fonte
ps -eLf
no shell deve fornecer uma lista de todos os threads e processos atualmente em execução no sistema. Ou, você pode executar otop
comando e pressionar 'H' para alternar entre as listagens de threads.fonte
-p
a isso, se necessário, ou qualquer outra coisa. Este é o mínimo que você precisa para ver a lista de tópicos.O JStack é bastante barato - uma opção seria canalizar a saída através do grep para encontrar threads ativos e, em seguida, canalizar através do wc -l.
Mais graficamente é o JConsole, que exibe a contagem de threads para um determinado processo.
fonte
Se você usar:
Você deve subtrair 1 ao resultado, pois uma das linhas "wc" está contando são os cabeçalhos do comando "ps".
fonte
ps
como um dos threads.Aqui está um comando que exibe o número de threads de um determinado processo:
Diferentemente das outras
ps
respostas baseadas, aqui não há necessidade de subtrair1
sua saída, pois não háps
linha de cabeçalho graças à-o pid=
opção.fonte
$ ps H p pid-id
H - lista todos os segmentos individuais em um processo
ou
$cat /proc/pid-id/status
pid-id é o ID do processo
por exemplo .. (Truncou a saída abaixo)
fonte
As distribuições mais recentes do JDK são fornecidas com o JConsole e o VisualVM. Ambas são ferramentas fantásticas para obter os detalhes sujos de um processo Java em execução. Se você precisar fazer isso programaticamente, investigue o JMX.
fonte
O jvmtop pode mostrar a contagem atual de encadeamentos jvm ao lado de outras métricas.
fonte
A maneira mais fácil é usar "htop". Você pode instalar o "htop" (uma versão mais sofisticada do topo), que mostrará todos os seus núcleos, processos e uso de memória.
Pressione "Shift + H" para mostrar todo o processo ou pressione novamente para ocultá-lo. Pressione a tecla "F4" para pesquisar o nome do processo.
Instalando no Ubuntu ou Debian:
Instalando no Redhat ou CentOS:
Se você deseja compilar "htop" a partir do código fonte, você o encontrará aqui .
fonte
Se você está tentando descobrir o número de threads usando cpu para um dado pid, eu usaria:
fonte
Se você estiver interessado nos segmentos que são realmente ativos - como fazer algo (sem bloqueio, sem timed_waiting, sem relatar "thread em execução", mas realmente esperando que um fluxo forneça dados), em vez de ficar ocioso, mas ao vivo - - então você pode estar interessado em jstack-active .
Esse script simples do bash é executado
jstack
e filtra todos os threads que, por heurística, parecem estar ociosos, mostrando a pilha de rastreamentos para os threads que estão realmente consumindo ciclos de CPU.fonte
O VisualVM pode mostrar estados claros de encadeamentos de um determinado processo da JVM
fonte
Se você deseja o número de threads por usuário em um sistema Linux, deve usar:
onde, como usar o nome de usuário desejado.
fonte