Como monitorar o uso da CPU / memória de um único processo?

130

Eu gostaria de monitorar o uso de memória / cpu de um processo em tempo real. Semelhante a top , mas direcionado a apenas um processo, de preferência com um gráfico de histórico de algum tipo.

    
por Josh K 17.08.2010 / 05:21

8 respostas

116

No Linux, top realmente suporta o foco em um único processo, embora, naturalmente, não tenha um gráfico de histórico:

top -p PID

Isso também está disponível no Mac OS X com uma sintaxe diferente:

top -pid PID
    
por 17.08.2010 / 05:27
54

htop é um ótimo substituto para top . Tem ... Cores! Atalhos de teclado simples! Percorra a lista usando as setas! Mate um processo sem sair e sem anotar o PID! Marque vários processos e mate todos!

Entre todos os recursos, a página de manual diz que você pode pressionar F para seguir um processo.

Realmente, você deve tentar htop . Eu nunca mais iniciei top , depois da primeira vez que usei htop .

Exibe um único processo:

htop -p PID

    
por 18.08.2010 / 00:47
26

psrecord

Os endereços a seguir gráfico histórico de algum tipo . O pacote psrecord do Python faz exatamente isso.

pip install psrecord                             # local user install
sudo apt-get install python-matplotlib python-tk # for plotting; or via pip

Para um único processo, é o seguinte (interrompido por Ctrl + C ):

psrecord $(pgrep proc-name1) --interval 1 --plot plot1.png

Para vários processos, o script a seguir é útil para sincronizar os gráficos:

#!/bin/bash    
psrecord $(pgrep proc-name1) --interval 1 --duration 60 --plot plot1.png &
P1=$!
psrecord $(pgrep proc-name2) --interval 1 --duration 60 --plot plot2.png &
P2=$!
wait $P1 $P2
echo 'Done'

Os gráficos parecem:

memory_profiler

O pacote oferece amostragem apenas por RSS (além de algumas opções específicas do Python). Também pode gravar o processo com seus processos filhos (consulte mprof --help ).

pip install memory_profiler
mprof run /path/to/executable
mprof plot

Por padrão, isso mostra um explorador de gráficos baseado em Tkinter ( python-tk pode ser necessário) que pode ser exportado:

pilhadegrafite&statsd

Podeparecerumexageroparaumtestesimples,masparaalgocomoumadepuraçãodeváriosdiasé,comcerteza,razoável.Umaimagemacessívelem raintank/graphite-stack (da autoria de Grafana) e psutil e statsd cliente . procmon.py fornece uma implementação.

$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack

Em outro terminal, depois de iniciar o processo de segmentação:

$ sudo apt-get install python-statsd python-psutil # or via pip
$ python procmon.py -s localhost -f chromium -r 'chromium.*'

Em seguida, abra o Grafana no link , autenticação como admin:admin , configurando o link , você pode plotar um gráfico como:

pilhadegrafite&telegrafar

EmvezdeoscriptPythonenviarasmétricasparaoStatsd, telegraf (e procstat input plugin) podem ser usado para enviar as métricas para o Graphite diretamente.

A configuração mínima de telegraf é semelhante a:

[agent]
  interval = "1s"

[[outputs.graphite]]
  servers = ["localhost:2003"]
  prefix = "testprfx"

[[inputs.procstat]]
  pid_file = "/path/to/file/with.pid"

Em seguida, execute a linha telegraf --config minconf.conf . A parte de Grafana é a mesma, exceto nomes de métricas.

sysdig

sysdig (disponível no repositório Debian e do Ubuntu) com sysdig-inspecionar A interface do usuário parece muito promissora, fornecendo detalhes extremamente refinados juntamente com a utilização da CPU e RSS, mas infelizmente a interface do usuário não pode renderizá-los e sysdig can \ filter procinfo event por processo no momento da gravação. Porém, isso deve ser possível com um cinzel personalizado (uma extensão sysdig escrita em Lua).

    
por 04.01.2018 / 14:38
8

Para usar essas informações em um script, você pode fazer isso:

calcPercCpu.sh

#!/bin/bash
nPid=$1;
nTimes=10; # customize it
delay=0.1; # customize it
strCalc='top -d $delay -b -n $nTimes -p $nPid \
  |grep $nPid \
  |sed -r -e "s;\s\s*; ;g" -e "s;^ *;;" \
  |cut -d' ' -f9 \
  |tr '\n' '+' \
  |sed -r -e "s;(.*)[+]$;;" -e "s/.*/scale=2;(&)\/$nTimes/"';
nPercCpu='echo "$strCalc" |bc -l'
echo $nPercCpu

use como: calcPercCpu.sh 1234 onde 1234 é o pid

Para o $ nPid especificado, ele medirá a média de 10 instantâneos do uso da CPU em um inteiro de 1 segundo (atraso de 0,1s cada * nTimes = 10); que fornece um bom e rápido resultado preciso do que está acontecendo no momento.

Ajuste as variáveis de acordo com suas necessidades.

    
por 30.06.2013 / 06:31
5

Eu normalmente uso depois de dois:

  1. Compasso HP : é uma ferramenta muito boa para monitorar processos, você pode verificar o gráfico de chamadas e outras informações de baixo nível também. Mas por favor, note que é grátis apenas para uso pessoal.

  2. daemontools : uma coleção de ferramentas para gerenciar serviços UNIX

por 17.08.2010 / 10:59
2

Se você souber o nome do processo, poderá usar

top -p $(pidof <process_name>)
    
por 29.04.2015 / 17:03
0

Se você precisar das médias por um período de tempo de um processo específico, tente a opção -c acumulativa do topo:

top -c a -pid PID

"- c a" encontrado na parte superior do Mac 10.8.5.

Para o Scientific Linux, a opção é -S, que pode ser configurada interativamente.

    
por 12.05.2014 / 00:09
0

Se você tiver uma distribuição Linux reduzida na qual o topo não possui a opção por processo (-p) ou opções relacionadas, é possível analisar a saída do comando top do nome do processo para obter as informações de uso da CPU por processo.

while true;  do top -bn1 | awk '/your_process_name/ {print  $8}' ; sleep 1; done

8 representa o uso da CPU por processo na saída do comando top da minha distribuição Linux incorporada

    
por 03.03.2017 / 06:37