¿Cuánta RAM está usando esta aplicación?

10

Si ejecuto top -cu htopobtengo procesos con su consumo de memoria, pero no es lo que quiero ver.

¿Existe una línea de comando que permita ver el consumo de RAM de una aplicación determinada?

Por ejemplo, quiero ver el consumo de RAM del servidor web Apache (en cambio, no comprobando todos los procesos que ejecuta)


fuente
Gracias. Lo mejor que puedo encontrar en él es un consumo de memoria en el proceso, la que la parte superior -c ya me da

Respuestas:

4

Aquí hay una muy buena explicación detallada: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Pero esencialmente: tienes que profundizar y comprender cómo está configurada la aplicación.

Entonces, por ejemplo, mirando mysql:

  PID  PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                    
 6004 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:40.33 mysqld                                                                                                                                            
16115 16085 composit  20   0 37900  27m 2908 S    0  0.2   0:00.37 mysqld                                                                                                                                            
16116 16115 composit  20   0 37900  27m 2908 S    0  0.2   2:07.34 mysqld                                                                                                                                            
16117 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld                                                                                                                                            
16118 16116 composit  20   0 37900  27m 2908 S    0  0.2   3:19.79 mysqld                                                                                                                                            
16119 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.01 mysqld                                                                                                                                            
16120 16116 composit  20   0 37900  27m 2908 S    0  0.2   5:31.09 mysqld                                                                                                                                            
16121 16116 composit  20   0 37900  27m 2908 S    0  0.2  14:19.53 mysqld                                                                                                                                            
16122 16116 composit  20   0 37900  27m 2908 S    0  0.2  36:13.67 mysqld                                                                                                                                            
16123 16116 composit  20   0 37900  27m 2908 S    0  0.2  30:30.64 mysqld                                                                                                                                            
16124 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.15 mysqld                                                                                                                                            
16493 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld    

La memoria total utilizada es de aproximadamente 25 MB (Tome la RES de 27 MB y reste la compartida (SHR))

Validé esto comprobando el uso total de memoria (free -m, + / buffers / cache) antes y después de emitir un "killall mysqld". Después de eliminar todos los procesos de mysqld, el uso de memoria se redujo en 25 MB según "free -m".

Si ve que cada proceso tiene columnas VIRT, RES y SHR idénticas, es probable que solo sean hilos del mismo proceso. (Las bibliotecas antiguas de Linux manejaban el subproceso generando múltiples procesos reales que esencialmente ocupaban la misma memoria)

Si son diferentes, puede estimarlo haciendo una SUMA de (RES - SHR). Pero eso solo funciona si los procesos son de hecho procesos separados y no solo hilos del mismo proceso. Mirar el PPID (ID del proceso principal) también ayuda. Si todos tienen el mismo padre, probablemente sean solo hilos (aunque no necesariamente).

Desafortunadamente, no hay una forma fácil y buena de responder esto en Linux. La única forma fácil es marcar "gratis" inmediatamente antes de finalizar el proceso y volver a verificarlo inmediatamente después. mire la línea "- / + buffers / cache:" y vea cuánto disminuyó el uso de memoria y eso le dirá cuánto estaba usando.

irwinr
fuente
2

Con un poco de ayuda man psy esta gran respuesta ...

ps -up $(pidof PROCESS_NAME)

Por ejemplo:

[wilf@comp ~]$ ps -up $(pidof firefox)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
wilf      1619  8.9  5.6 1464216 342396 ?      Sl   17:56   1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$ 

Otras maneras:

cat /proc/$(pidof firefox)/status | grep VmSize

Esto se puede ejecutar sin -xy tail -1:

pmap -x $(pidof firefox) | tail -1

solo muestra porcentaje:

top -p $(pidof firefox)

Además, mientras usa toppuede presionar ipara ignorar los procesos inactivos / zombies para que sea más fácil de leer: salida superior mucho más pequeña

Wilf
fuente
pero una aplicación inicia varios procesos, ¿cómo puedo saber cuál es el principal?
¿adivinar? Creo que pmapmuestra muchas cosas sobre los recursos que utiliza el PID. La información se proporciona en función del nombre del proceso y el PID que se encuentra utilizando pidof, por lo que el proceso principal se muestra si el nombre que proporciona (creo, no sé si se refiere a procesos principales)
Wilf
2
Esto separa la salida por proceso. No obtendrá la cantidad total de memoria utilizada por todos los procesos de Apache de esta manera. Debe resumir, pero contar regiones compartidas solo una vez (este es el bit difícil).
Gilles 'SO- deja de ser malvado'