Quiero monitorear el uso de memoria de un proceso y quiero que se registren estos datos. ¿Existe tal herramienta?
Quiero monitorear el uso de memoria de un proceso y quiero que se registren estos datos. ¿Existe tal herramienta?
Respuestas:
He escrito un guión para hacer exactamente esto . Básicamente muestra ps
a intervalos específicos, para construir un perfil de un proceso particular. El proceso puede ser iniciado por la herramienta de monitoreo en sí, o puede ser un proceso independiente (especificado por pid o patrón de comando).
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.
grep --line-buffered <process> >>somefile
que forzar grep para generar cada línea sin almacenamiento en búfer
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, ...
sar
centrarse en un solo proceso? principalmente parece monitorear el sistema como un todo
pidstat
comando también del paquete sysstat proporciona una interfaz bastante agradable para informar estadísticas sobre un solo proceso.
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 .
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}]