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

Respuestas:

8

He escrito un guión para hacer exactamente esto . Básicamente muestra psa 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).

Jeet
fuente
1
Syrupy aparentemente se mudó a github.com/jeetsukumaran/Syrupy
Framester el
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.

Sridhar Iyer
fuente
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, ...

cristiano
fuente
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.

rsuarez
fuente
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 .

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