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

265

Solía topver el uso de memoria en este momento. Pero me gustaría monitorear el uso de la memoria durante un período de tiempo. Por ejemplo, comience a monitorear y luego ejecute algunos comandos, y finalmente detenga el monitoreo y vea cuánta memoria se ha usado durante el período.

¿Cómo puedo hacer esto en Ubuntu Server?

Supongo 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?

Jonas
fuente

Respuestas:

322

Recomiendo combinar las respuestas anteriores

watch -n 5 free -m

Tenga en cuenta que a Linux le gusta usar cualquier memoria adicional para almacenar en caché los bloques del disco duro . Así que no quieres mirar solo lo gratis Mem. Desea mirar la freecolumna de la -/+ buffers/cache:fila. Esto muestra la cantidad de memoria disponible para las aplicaciones. Así que simplemente corrí free -my 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 watchciclo, simplemente presione Ctrl+ C.

Justin Force
fuente
1
Gracias, eso es informativo. Pero en la columna usada que primero tiene 2896y luego 1528para los buffers, ¿no significa esto que está usando 2896 + 1528?
Jonas
8
Mem: usedes tu memoria total utilizada. -/+ buffers/cache: usedes su memoria total utilizada menos buffers y caché. Sé que la salida se ve divertida, pero no se requiere aritmética aquí. Solo está buscando usado / libre en la fila - / + buffers / cache.
Justin Force
66
La opción -h es mucho mejor
frmdstryr
1
@frmdstryr ¡Buen punto! -h / - humano no existía cuando escribí esto, sin embargo. gitlab.com/procps-ng/procps/commit/…
Justin Force
3
@ cbradsh1 Puede hacerlo free -h, por ejemplo, watch -n 5 free -hpara obtener una salida "legible para humanos", por ejemplo, en 2.1Glugar de 2170en la salida.
Justin Force
213

Creo que htopes la mejor solución.

  • sudo apt-get install htop

De esta manera, notará qué programas están utilizando más RAM. y puede terminar fácilmente uno si lo desea. Aquí hay una captura de pantalla!

Alvar
fuente
2
htopes agradable porque es más "gráfico" y posiblemente más fácil de leer que free.
mjswensen
1
No entiendo la salida. ¿ RESLa memoria utilizada por esa aplicación en MB? ¿Entonces qué es SHR?
faizal
1
@faizal: memoria virtual, reservada y compartida.
WitchCraft
1
¿Cómo le htopmuestra "el uso de memoria durante un período de tiempo"?
peligro
htop -s M_SHARE htop -s TIME
Tomachi
40

Si está buscando un buen desglose de la memoria utilizada por cada proceso en ejecución, entonces podría recomendarle consultar ps_mem.py (que se encuentra aquí en pixelbeat.org).

Sé que en los comentarios anteriores, mencionaste que querías una instantánea de una línea de forma gratuita , pero pensé que otros podrían encontrar esto útil.

Salida de ejemplo:

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.

Jason Mock
fuente
Me pregunto si la memoria se comparte entre hilos. Se comparte entre procesos, ¿no? Al menos en Windows ...
Thomas Weller
Entonces, en este caso, la memoria compartida se refiere a páginas mapeadas por múltiples procesos en forma de bibliotecas compartidas. Además, en el contexto de aplicaciones de subprocesos múltiples, todos los subprocesos de ese proceso pueden acceder al espacio de memoria de proceso completo.
Jason Mock
44
Ahora disponible en PyPI ( pip install ps_mem) y en GitHub .
Leif Arne Storset
@ThomasWeller: Sí, los subprocesos siempre comparten memoria, mientras que los procesos pueden compartir parte o la totalidad en ciertas condiciones.
Leif Arne Storset
para esto uso gnome-system-monitor
24

Usa 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 /+ solo devolverá la segunda línea:

-/+ buffers/cache:        947       1064
Isaias
fuente
Gracias, se ve genial. Entonces, ¿este 947es el uso de memoria menos la memoria utilizada para memorias intermedias y cachés?
Jonas
11

El comando de vigilancia puede ser útil. Intente watch -n 5 freecontrolar el uso de la memoria con actualizaciones cada cinco segundos.

mgunes
fuente
Gracias, esto fue genial! Sin embargo, preferiría obtener el uso de memoria en una sola línea, por lo que es fácil iniciar sesión en un archivo de texto.
Jonas
8

Puedes hacerlo usando cat /proc/meminfo.

MemTotal:        4039160 kB
MemFree:          309796 kB
MemAvailable:    3001052 kB
Buffers:          345636 kB
Cached:          2341288 kB
SwapCached:            8 kB
Active:          1725160 kB
Inactive:        1551652 kB
Active(anon):     538404 kB
Inactive(anon):    70076 kB
Active(file):    1186756 kB
Inactive(file):  1481576 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        589988 kB
Mapped:           255972 kB
Shmem:             18596 kB
Slab:             374888 kB
SReclaimable:     310496 kB
SUnreclaim:        64392 kB
KernelStack:        6976 kB
PageTables:        26452 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6213880 kB
Committed_AS:    3589736 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      147392 kB
DirectMap2M:     4046848 kB
Amir
fuente
1
¡Agregar reloj al frente de este comando lo hace increíble! como enwatch cat /proc/meminfo
Elder Geek
El freecomando toma su información /proc/meminfoy la presenta de manera compacta. Uso free -hpara salida legible para humanos.
LoMaPh
4

Para el monitoreo visual del uso general de RAM, si usa Byobu , mantendrá su uso de memoria en la esquina inferior derecha del 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 0.00, tiene un procesador 2.8GHz (virtual) y 994MB (21%) de la RAM disponible en el sistema.

Byobu en uso

bafromca
fuente
3

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

free -m | grep "Mem:"

Aquí hay un ejemplo de la salida esperada:

Mem:           3944         652         302          18        2990        2930
Tim
fuente
1

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

Mate
fuente
1

Monitoreo del uso de memoria

Estoy más en línea con una de las publicaciones anteriores que mencionó a Cacti como una excelente manera de monitorear 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 consultar este enlace para ver los procedimientos de instalación fáciles de seguir.

Después de instalar el grafito, ahora puede enviarle métricas de memoria, en cualquier intervalo que desee; cada 5 segundos, cada minuto, cada hora ... etc.

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

Si desea escribir su propio script de memoria, será prudente asegurarse de tener en cuenta la memoria almacenada en memoria intermedia y en caché al calcular la memoria utilizada, de lo contrario, terminará recopilando datos falsos.

Si en su lugar 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 .

Ventajas de SNMP:

Tengo instalado snmp en todos los nodos remotos que monitorizo. Esto me permite monitorear todos mis sistemas desde uno o más servidores centrales , 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 en los que desea monitorear la memoria. Sin embargo, esta instalación será un trato único. Si está utilizando herramientas de automatización como chef o títeres 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 vi 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 puede monitorear 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
Velocidad simplista
fuente