Eu gostaria de monitorar o uso de memória / CPU de um processo em tempo real. Semelhante, top
mas direcionado a apenas um processo, de preferência com um gráfico de histórico de algum tipo.
shell
process
monitoring
top
Josh K
fonte
fonte
Respostas:
No Linux,
top
na verdade , suporta o foco em um único processo, embora naturalmente não tenha um gráfico de histórico:Isso também está disponível no Mac OS X com uma sintaxe diferente:
fonte
top -p `pgrep -f /usr/bin/kvm`
.hostname
_pid.txt; exit'andhtop
é um ótimo substituto paratop
. Tem ... Cores! Atalhos de teclado simples! Role a lista usando as teclas de seta! Mate um processo sem sair e sem tomar nota do PID! Marque vários processos e mate todos!Entre todos os recursos, a página de manual diz que você pode pressionar Fpara seguir um processo.
Realmente, você deveria tentar
htop
. Eu nunca comeceitop
novamente, depois da primeira vez que useihtop
.Exiba um único processo:
htop -p PID
fonte
top
também tem cores. Pressionez
.top
tem cores! Pena que suas cores são bastante inúteis, especialmente quando comparadas comhtop
(que desbota os processos de outros usuários e destaca o nome de base do programa).htop -p PID
também funcionará, assim como o exemplo dado por @Michael Mrozek.psrecord
O gráfico de histórico de endereços a seguir de algum tipo . O
psrecord
pacote Python faz exatamente isso.Para um processo único, é o seguinte (parado Ctrl+C):
Para vários processos, o seguinte script é útil para sincronizar os gráficos:
Os gráficos são parecidos com:
memory_profiler
O pacote fornece amostra apenas de RSS (mais algumas opções específicas do Python). Ele também pode registrar processos com os processos filhos (consulte
mprof --help
).Por padrão, isso exibe um
python-tk
explorador de gráficos baseado em Tkinter ( pode ser necessário) que pode ser exportado:pilha de grafite & statsd
Pode parecer um exagero para um teste pontual simples, mas para algo como uma depuração de vários dias é, com certeza, razoável. Um prático all-in-one
raintank/graphite-stack
imagem (de autores de Grafana) epsutil
estatsd
cliente.procmon.py
fornece uma implementação.Em outro terminal, após iniciar o processo de destino:
Em seguida, abra o Grafana em http: // localhost: 8080 , authentication as
admin:admin
, configure datasource https: // localhost , você pode plotar um gráfico como:pilha de grafite e telegraf
Em vez de o script Python enviar as métricas para o Statsd,
telegraf
(e oprocstat
plug-in de entrada) podem ser usados para enviar as métricas ao Graphite diretamente.A
telegraf
configuração mínima se parece com:Depois corra a linha
telegraf --config minconf.conf
. A parte Grafana é a mesma, exceto os nomes das métricas.sysdig
sysdig
(disponível nos repositórios Debian e Ubuntu) com a interface do usuário sysdig-inspecionada, parece muito promissor, fornecendo detalhes extremamente detalhados, juntamente com a utilização da CPU e o RSS, mas infelizmente a interface do usuário não pode renderizá-los esysdig
não pode filtrarprocinfo
eventos por processo no diretório tempo de escrita. No entanto, isso deve ser possível com um cinzel personalizado (umasysdig
extensão escrita em Lua).fonte
pgrep --help
para o resgate. Há pelo menos--newest
e--oldest
.Ctrl+C
no processo psrecord é encerrado sem salvar um gráfico, você precisa finalizar o processo em teste.Para usar essas informações em um script, você pode fazer isso:
calcPercCpu.sh
use like:
calcPercCpu.sh 1234
onde 1234 é o pidPara o $ nPid especificado, ele medirá a média de 10 instantâneos do uso da CPU em um segundo inteiro (atraso de 0,1s cada * nTimes = 10); que fornece um resultado preciso bom e rápido do que está acontecendo no momento.
Ajuste as variáveis de acordo com suas necessidades.
fonte
$nPercCpu
): shell, top, grep, sed, cut ... bc. Muitos, se não todos, você pode, por exemplo, mesclar-se ao script 1 Sed ou Awk.top
a produção está acima da média$delay
. Cf. Como calcular o uso da CPUEu normalmente uso os dois seguintes:
Caliper HP : sua ferramenta muito boa para monitorar processos, você também pode verificar o gráfico de chamadas e outras informações de baixo nível. Mas observe que é gratuito apenas para uso pessoal.
daemontools : uma coleção de ferramentas para gerenciar serviços UNIX
fonte
Usar
top
eawk
poder-se-ia criar facilmente, por exemplo, um log separado por vírgula do uso de% CPU ($9
) +% MEM ($10
) que pode ser posteriormente alimentado em qualquer ferramenta de estatística e gráfico.A saída será como
Isso não dará bons resultados para grandes
$delay
, no entanto, porque o carimbo de data / hora impresso está realmente$delay
atrasado devido à forma comotop
a saída funciona. Sem entrar em muitos detalhes, uma maneira simples de contornar isso é registrar o tempo fornecido portop
:O carimbo de data / hora é preciso, mas a saída ainda será atrasada
$delay
.fonte
Se você souber o nome do processo, poderá usar
fonte
Se você tiver uma distribuição Linux cortada em que top não possui opção por processo (-p) ou opções relacionadas, poderá analisar a saída do comando top do nome do seu processo para obter as informações de uso da CPU por processo.
8 representa o uso da CPU por processo na saída do comando top na minha distribuição Linux incorporada
fonte
Não há reputação suficiente para comentar, mas, para o psrecord, você também pode chamá-lo diretamente, de maneira programática, diretamente no Python:
fonte
Se você precisar das médias durante um período de um processo específico, tente a opção -c acumulativa de cima:
"-c a" encontrado na parte superior do Mac 10.8.5.
Para o Scientific Linux, a opção é -S, que pode ser configurada interativamente.
fonte
top
realmente fornecem esse recurso. Minha versão no Fedora 19 não. O mesmo também no Ubuntu 13.04.Estou um pouco atrasado aqui, mas vou compartilhar meu truque de linha de comando usando apenas o padrão
ps
Eu uso isso como uma linha. Aqui a primeira linha dispara o comando e armazena o PID na variável Então ps imprimirá o tempo decorrido, o PID a porcentagem de CPU usada, a porcentagem de memória e a memória RSS. Você também pode adicionar outros campos.
Assim que o processo terminar, o
ps
comando não retornará "sucesso" e o comandowhile
loop terminará.Você pode ignorar a primeira linha se o PID que você deseja criar o perfil já estiver em execução. Basta colocar o ID desejado na variável.
Você obterá uma saída como esta:
fonte