¿Existe una herramienta que permita el registro del uso de memoria?


18

Quiero monitorear el uso de memoria de un proceso y quiero que se registren estos datos. ¿Existe tal herramienta?


1
Creo que este enlace sobre el monitoreo programático de un uso de memoria de proceso será útil para resolver su necesidad.
Sen

Respuestas:



12

Ocasionalmente, cuando surge la necesidad, simplemente hago:

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

No es una solución elegante, pero hace el trabajo si desea que el valor bruto rápido verifique su hipótesis.


Creo que es elegante en su simplicidad. Es posible que desee hacer grep --line-buffered <process> >>somefileque forzar grep para generar cada línea sin almacenamiento en búfer
Ott Toomet

7

sar( System Activity Reporter ) del paquete sysstat es tu amigo en este caso.

Otra forma sería el monitoreo combinado con datos históricos, por ejemplo, Munin, pnp4nagios, rrdtools, ...


1
pero puede sarcentrarse en un solo proceso? principalmente parece monitorear el sistema como un todo
xenoterracide

3
El pidstatcomando también del paquete sysstat proporciona una interfaz bastante agradable para informar estadísticas sobre un solo proceso.
Steven D

@xenoterracide Steven D tenía la respuesta. No estaba al tanto de este comando antes.
Christian

4

Además del sar mencionado anteriormente, recomendaría encima . Guarda un registro binario que puede examinar luego, y además la memoria guarda mucha otra información.


3

Podrías probar Valgrind .

Valgrind es un marco de instrumentación para construir herramientas de análisis dinámico. Existen herramientas de Valgrind que pueden detectar automáticamente muchos errores de administración de memoria y subprocesos, y perfilar sus programas en detalle. También puede usar Valgrind para construir nuevas herramientas.

La distribución Valgrind actualmente incluye seis herramientas de calidad de producción: un detector de errores de memoria , dos detectores de errores de subprocesos, un generador de perfiles de caché y predicción de rama, un generador de caché de generación de gráficos de llamadas y un generador de perfiles de predicción de rama y un generador de perfiles de montón .


Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
saji89

Este documento explica el macizo en detalle.
Shawn Xie

0

Me gusta la respuesta simple de Sridhar, pero rodé la mía antes de probar la suya:

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)

Básicamente solo es útil si desea una salida estructurada. Cambie 7274 según corresponda. También Python 3.5. Algo se rompió _asdict(), así que usa Python 2.

El archivo de salida se ve así:

["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}]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.