Uso máximo de memoria de un proceso Linux/Unix [cerrado]

Resuelto jes5199 asked hace 15 años • 20 respuestas

¿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

jes5199 avatar Apr 22 '09 03:04 jes5199
Aceptado

[ Editar : funciona en Ubuntu 14.04: /usr/bin/time -v command asegúrese de utilizar la ruta completa].

Parece /usr/bin/timeque te brinda esa información, si apruebas -v(esto es en Ubuntu 8.10). Véase, por ejemplo, Maximum resident set sizea 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
Jacob Gabrielson avatar Apr 21 '2009 21:04 Jacob Gabrielson

(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.

 avatar Aug 16 '2010 08:08

En Linux:

Utilice /usr/bin/time -v <program> <args>y busque " Tamaño máximo del conjunto de residentes ".

(¡No debe confundirse con el timecomando 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
      . . .
 avatar Oct 22 '2017 13:10

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.

jbeard4 avatar Jun 09 '2012 00:06 jbeard4

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 $PIDcon el PID del proceso que le interesa)

erobertc avatar Feb 13 '2019 00:02 erobertc