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
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.
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
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'
Omprof --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:
Podeparecerumexageroparaumtestesimples,masparaalgocomoumadepuraçãodeváriosdiasé,comcerteza,razoável.Umaimagemacessívelemraintank/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
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
(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).
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.
Eu normalmente uso depois de dois:
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.
daemontools : uma coleção de ferramentas para gerenciar serviços UNIX
Se você souber o nome do processo, poderá usar
top -p $(pidof <process_name>)
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.
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
Tags process monitoring top shell