Existe uma ferramenta que permita o registro do uso da memória?

Respostas:

8

Eu escrevi um script para fazer exatamente isso . É basicamente uma amostra psem 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).

Jeet
fonte
11
Xaroposo, aparentemente, mudou-se para github.com/jeetsukumaran/Syrupy
Framester
12

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.

Sridhar Iyer
fonte
Eu acho que é elegante por sua simplicidade. Você pode querer fazer grep --line-buffered <process> >>somefilepara forçar grep para a saída de cada linha, sem buffer
Ott Toomet
7

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, ...

cristão
fonte
11
mas pode sarser focado em apenas um processo? principalmente parece para monitorar o sistema como um todo
xenoterracide
3
O pidstatcomando também do pacote sysstat fornece uma interface bastante agradável para relatar estatísticas em um único processo.
Steven D
@xenoterracide Steven D teve a resposta. Eu não estava ciente desse comando antes.
Christian
4

Além do sar acima mencionado, eu recomendo no topo . Ele salva um log binário que você pode ler posteriormente e, além disso, a memória salva muitas outras informações.

rsuarez
fonte
3

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 .

andcoz
fonte
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
precisa saber é
Este documento maciço explica em detalhes.
precisa
0

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}]
Robert Fleming
fonte