Quero monitorar o uso da memória de um processo e quero que esses dados sejam registrados. Existe uma ferramenta desse tipo?
Quero monitorar o uso da memória de um processo e quero que esses dados sejam registrados. Existe uma ferramenta desse tipo?
Respostas:
Eu escrevi um script para fazer exatamente isso . É basicamente uma amostra ps
em intervalos específicos, para criar um perfil de um processo específico. O processo pode ser iniciado pela própria ferramenta de monitoramento ou pode ser um processo independente (especificado por pid ou padrão de comando).
Ocasionalmente, quando surge a necessidade, eu apenas faço:
$ top -d 1 -b |grep <process> >>somefile
Não é uma solução elegante, mas faz o trabalho se você deseja que o valor bruto rápido verifique sua hipótese.
grep --line-buffered <process> >>somefile
para forçar grep para a saída de cada linha, sem buffer
sar
( System Activity Reporter ) do pacote sysstat é seu amigo nesse caso.
Outra maneira seria o monitoramento combinado com dados históricos, por exemplo, Munin, pnp4nagios, rrdtools, ...
sar
ser focado em apenas um processo? principalmente parece para monitorar o sistema como um todo
pidstat
comando também do pacote sysstat fornece uma interface bastante agradável para relatar estatísticas em um único processo.
Você poderia tentar Valgrind .
Valgrind é uma estrutura de instrumentação para a construção de ferramentas de análise dinâmica. Existem ferramentas Valgrind que podem detectar automaticamente muitos bugs de gerenciamento de memória e de segmentação, além de criar um perfil detalhado de seus programas. Você também pode usar o Valgrind para criar novas ferramentas.
Atualmente, a distribuição Valgrind inclui seis ferramentas de qualidade de produção: um detector de erros de memória , dois detectores de erros de encadeamento, um criador de perfil de previsão de ramificação e cache, um gerador de cache e gerador de perfil de previsão de ramificação e um gerador de heap .
Gosto da resposta simples de Sridhar, mas rolei a minha antes de experimentar a dele:
import json, psutil, datetime, time
with open('log.txt', 'w') as f:
while True:
json.dump((datetime.datetime.now().isoformat(),
psutil.Process(7274).memory_info()._asdict()), f)
f.write('\n')
f.flush()
time.sleep(1)
É basicamente útil apenas se você deseja saída estruturada. Altere 7274 conforme apropriado. Também Python 3.5.algo quebrou_asdict()
, então use o Python 2.
O arquivo de saída se parece com:
["2019-03-19T11:21:53.784670", {"rss": 220389376, "vms": 538984448, "shared": 15724544, "text": 303104, "lib": 0, "data": 221364224, "dirty": 0}]
["2019-03-19T11:21:54.786136", {"rss": 220438528, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:55.787555", {"rss": 220495872, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:56.788754", {"rss": 220528640, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]