Esiste uno strumento che consente la registrazione dell'utilizzo della memoria?


18

Voglio monitorare l'utilizzo della memoria di un processo e voglio che questi dati vengano registrati. Esiste un tale strumento?


1
Penso che questo link sul monitoraggio programmatico dell'utilizzo della memoria di processo possa essere utile per risolvere le tue esigenze.
Sen,

Risposte:



12

Occasionalmente, quando sorge la necessità, faccio semplicemente:

$ top -d 1 -b |grep <process> >>somefile

Non è una soluzione elegante, ma svolge il lavoro se si desidera che il rapido valore del greggio verifichi la propria ipotesi.


Penso che sia elegante nella sua semplicità. Potresti voler fare grep --line-buffered <process> >>somefileper forzare grep ad emettere ogni riga senza buffering
Ott Toomet

7

sar( System Activity Reporter ) dal pacchetto sysstat è tuo amico in questo caso.

Un altro modo sarebbe il monitoraggio combinato con dati storici, ad esempio Munin, pnp4nagios, rrdtools, ...


1
ma può saressere focalizzato su un solo processo? per lo più sembra monitorare l'intero sistema
xenoterracide

3
Il pidstatcomando anche dal pacchetto sysstat fornisce un'interfaccia abbastanza piacevole per riportare statistiche su un singolo processo.
Steven D,

@xenoterracide Steven D ha avuto la risposta. Non ero a conoscenza di questo comando prima.
Christian,

4

Oltre al suddetto sar, lo consiglierei in cima . Salva un registro binario che puoi sfogliare in seguito, e oltre alla memoria salva molte altre informazioni.


3

Potresti provare Valgrind .

Valgrind è un framework di strumentazione per la creazione di strumenti di analisi dinamica. Esistono strumenti Valgrind in grado di rilevare automaticamente molti bug di gestione della memoria e threading e profilare i tuoi programmi in dettaglio. Puoi anche usare Valgrind per creare nuovi strumenti.

La distribuzione di Valgrind comprende attualmente sei strumenti di qualità della produzione: un rilevatore di errori di memoria , due rilevatori di errori di thread, un profiler di cache e previsione dei rami, un grafico di chiamata che genera cache e profiler di previsione dei rami e un profilatore di heap .


Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
saji89,

Questo massiccio del documento spiega in dettaglio.
Shawn Xie

0

Mi piace la semplice risposta di Sridhar ma ho fatto il mio prima di provare la sua:

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)

Fondamentalmente è utile solo se si desidera un output strutturato. Modificare 7274 come appropriato. Anche Python 3.5 si è rotto qualcosa _asdict(), quindi usa Python 2.

Il file di output è simile a:

["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}]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.