Uso máximo de memoria de un proceso Linux/Unix [cerrado]
¿Existe alguna herramienta que ejecute una línea de comandos e informe el uso máximo de RAM total?
Estoy imaginando algo análogo a /usr/bin/time
[ Editar : funciona en Ubuntu 14.04: /usr/bin/time -v command
asegúrese de utilizar la ruta completa].
Parece /usr/bin/time
que te brinda esa información, si apruebas -v
(esto es en Ubuntu 8.10). Véase, por ejemplo, Maximum resident set size
a continuación:
$ /usr/bin/hora -v ls / .... Comando cronometrado: "ls /" Tiempo de usuario (segundos): 0,00 Tiempo del sistema (segundos): 0,01 Porcentaje de CPU que obtuvo este trabajo: 250% Tiempo transcurrido (reloj de pared) (h:mm:ss o m:ss): 0:00.00 Tamaño promedio de texto compartido (kbytes): 0 Tamaño promedio de datos no compartidos (kbytes): 0 Tamaño medio de pila (kbytes): 0 Tamaño total promedio (kbytes): 0 Tamaño máximo del conjunto residente (kbytes): 0 Tamaño promedio del conjunto residente (kbytes): 0 Fallos de página mayores (que requieren E/S): 0 Errores de página menores (recuperación de un marco): 315 Cambios de contexto voluntarios: 2 Cambios de contexto involuntarios: 0 Permutas: 0 Entradas del sistema de archivos: 0 Salidas del sistema de archivos: 0 Mensajes de socket enviados: 0 Mensajes de socket recibidos: 0 Señales entregadas: 0 Tamaño de página (bytes): 4096 Estado de salida: 0
(Esta es una vieja pregunta ya respondida... pero solo para que conste :)
Me inspiré en el guión de Yang y se me ocurrió esta pequeña herramienta, llamada memusg . Simplemente aumenté la frecuencia de muestreo a 0,1 para manejar procesos de vida mucho más cortos. En lugar de monitorear un solo proceso, lo hice medir la suma de rss del grupo de procesos. (Sí, escribo muchos programas separados que funcionan juntos) Actualmente funciona en Mac OS X y Linux. El uso tenía que ser similar al de time
:
memusg ls -alR / >/dev/null
Por el momento sólo muestra el pico, pero me interesan ligeras extensiones para registrar otras estadísticas (aproximadas).
Es bueno tener una herramienta tan simple para simplemente echarle un vistazo antes de comenzar a crear perfiles serios.
En Linux:
Utilice /usr/bin/time -v <program> <args>
y busque " Tamaño máximo del conjunto de residentes ".
(¡No debe confundirse con el time
comando integrado de Bash! Así que use la ruta completa , /usr/bin/time
)
Por ejemplo:
> /usr/bin/time -v ./myapp
User time (seconds): 0.00
. . .
Maximum resident set size (kbytes): 2792
. . .
En BSD, MacOS:
Utilice /usr/bin/time -l <program> <args>
, buscando " tamaño máximo de conjunto residente ":
>/usr/bin/time -l ./myapp
0.01 real 0.00 user 0.00 sys
1440 maximum resident set size
. . .
Valgrind de una sola línea:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
Tenga en cuenta el uso de --pages-as-heap para medir toda la memoria en un proceso. Más información aquí: http://valgrind.org/docs/manual/ms-manual.html
Esto ralentizará significativamente su comando.
Aquí hay una frase que no requiere ningún script o utilidad externa y no requiere que inicie el proceso a través de otro programa como Valgrind o time, por lo que puede usarlo para cualquier proceso que ya se esté ejecutando:
grep ^VmPeak /proc/$PID/status
(reemplace $PID
con el PID del proceso que le interesa)