¿Cómo puedo controlar el uso de la memoria?

234

He usado top para ver el uso de memoria en este momento. Pero me gustaría controlar el uso de memoria durante un período de tiempo. Por ejemplo, inicie la supervisión y luego ejecute algunos comandos, y finalice la supervisión y vea cuánta memoria se ha utilizado durante el período.

¿Cómo puedo hacer esto en Ubuntu Server?

Creo que podría iniciar un cronjob cada 5 segundos, e invocar un comando que registra el uso actual de la memoria en un archivo de texto. Pero, ¿qué comando debo usar para obtener el uso actual de la memoria en un formato que sea fácil de registrar en un archivo de texto?

    
pregunta Jonas 26.10.2010 - 16:50

10 respuestas

288

Recomiendo combinar las respuestas anteriores

watch -n 5 free -m

Tenga en cuenta que a Linux le gusta usar cualquier memoria adicional para bloquear los bloques del disco duro . Entonces no querrás mirar solo el Mem gratis. Desea ver la columna free de la fila -/+ buffers/cache: . Esto muestra cuánta memoria hay disponible para las aplicaciones. Así que acabo de ejecutar free -m y obtuve esto:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

Sé que estoy usando 1528 MB y tengo 2170 MB gratis.

Nota: para detener este ciclo de watch , puede presionar Ctrl + C .

    
respondido por el Justin Force 26.10.2010 - 17:40
191

Creo que htop es la mejor solución.

  • sudo apt-get install htop

De esta forma notará qué programas usa la mayoría de RAM. y puede terminar fácilmente uno si lo desea. ¡Aquí hay una captura de pantalla!

    
respondido por el Alvar 18.05.2012 - 00:11
38

Si busca un buen desglose de la memoria utilizada por cada proceso en ejecución, le recomiendo que consulte ps_mem.py (encontrado aquí en pixelbeat.org).

Sé en los comentarios anteriores que mencionaste que querías una instantánea de una línea de gratis , pero pensé que a otros les podría resultar útil.

Ejemplo de salida:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

La única parte que no me gusta es el hecho de que el script afirma que requiere privilegios de root. Todavía no he tenido la oportunidad de ver exactamente por qué este es el caso.

    
respondido por el Jason Mock 01.10.2015 - 23:47
21

Utiliza el comando gratis . Por ejemplo, esta es la salida de free -m :

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ devolverá solo la segunda línea:

-/+ buffers/cache:        947       1064
    
respondido por el Isaiah 26.10.2010 - 17:19
9

El reloj puede ser útil. Pruebe watch -n 5 free para controlar el uso de la memoria con actualizaciones cada cinco segundos.

    
respondido por el mgunes 26.10.2010 - 17:27
4

Para la supervisión visual del uso general de la RAM, si usa Byobu , mantendrá el uso de la memoria en la esquina inferior derecha mano derecha de la terminal y se ejecutará mientras está en cualquier sesión de terminal.

Como puede ver en la captura de pantalla, mi máquina virtual tiene un tiempo de actividad de 1h3m, carga de 0.00, tiene un procesador 2.8GHz (virtual) y 994MB (21%) de la RAM disponible en el sistema.

    
respondido por el bafromca 19.01.2015 - 20:09
3

Puedes hacerlo usando cat /proc/meminfo .

    
respondido por el Amir 16.04.2016 - 19:15
3

Solución de línea única y salida:

free -m | grep "Mem:"

Aquí hay un ejemplo del resultado esperado:

    
respondido por el Tim 27.09.2016 - 13:30
1

Utilizaría Cacti . Esto representará gráficamente el uso de la memoria, etc. durante un período de tiempo, y podrá verificar el uso con su navegador web.

    
respondido por el Matt 26.10.2010 - 18:01
1

Monitorización del uso de la memoria

Estoy más en línea con una de las publicaciones anteriores que mencionaba Cacti como una excelente forma de controlar el uso de la memoria. Sin embargo, dado que parece que los cactus ya no son populares en la corriente principal, existe una aplicación gráfica alternativa llamada Graphite.

Graphite es relativamente fácil de instalar en un servidor ubuntu y para instalarlo, puede revise este enlace para conocer los procedimientos de instalación fáciles de seguir.

Después de que se haya instalado Graphite, ahora puede enviar métricas de memoria, en el intervalo que desee; cada 5 segundos, cada minuto, cada hora ... etc.

Para graficar las métricas de la memoria, como ya se sugirió en las publicaciones anteriores, puede escribir su propia secuencia de comandos utilizando las herramientas del sistema para recopilar la información de memoria necesaria. O bien, puede usar un plugin snmp preescrito que hará todo el trabajo por usted.

Si desea escribir su propia secuencia de comandos de memoria, será conveniente asegurarse de tener en cuenta la memoria almacenada y en memoria caché al calcular la memoria utilizada, de lo contrario, terminará recopilando datos falsos.

Si, en cambio, desea utilizar un complemento snmp que ya hace todos los cálculos necesarios para usted, aquí hay un enlace a uno que funciona bastante bien: checkMemoryviaSNMP .

Pros de SNMP:

Tengo SNMP instalado en todos los nodos remotos que monitoreo. Esto me permite controlar todos mis sistemas desde un servidor central (es) , sin tener que copiar o poner un complemento en los nodos remotos.

Contras de SNMP:

Debería asegurarse de que el agente snmp esté instalado en cada uno de los nodos remotos sobre los que desea monitorear la memoria. Sin embargo, esta instalación será un trato de una sola vez. Si está utilizando herramientas de automatización como chef o marioneta o herramientas similares en su entorno, entonces esto no es un problema en absoluto.

Configuración del agente SNMP en los nodos remotos:

Después de instalar el agente snmp, simplemente visualice el archivo /etc/snmpd/snmpd.conf y agregue esta línea:

rocommunity  (specify-a-community-string-aka-password-here)

Luego reinicie el agente snmpd, con:

/etc/init.d/snmpd restart

Luego, en su servidor central, desde el cual supervisa todos sus otros servidores, puede ejecutar el siguiente comando:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s
    
respondido por el SimplisticSpeed 22.10.2016 - 15:32

Lea otras preguntas en las etiquetas