Después de investigar, todavía confundido sobre el monitoreo del uso de RAM

10

Revisé este artículo , que explica varios métodos para verificar el uso de RAM. Sin embargo, no puedo conciliar los diferentes métodos y no sé cuál es el correcto.

Cuando ingreso por primera vez, me aparece una pantalla como esta:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Esto me sugiere que estoy usando el 41% de mi RAM, lo que parece bastante alto ya que el servidor no está haciendo mucho. ¿O ese número se refiere a algo además de RAM?

A continuación pruebo el free -mmétodo:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Según el gráfico explicativo en el artículo, esto implica que tengo 130 MB de RAM usada y 459 MB de RAM libre, lo que sugiere que estoy usando aproximadamente el 22% de mi RAM.

A continuación corro top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Esto es lo más confuso, ya que el resumen me muestra usando 525MG de 604M en total, y sin embargo, cuando se usa el comando interactivo "m" para ordenar por la memoria superior, ¿el proceso superior solo usa el 0.3% de la memoria?

Finalmente, el pscomando parece mostrar muy poco uso de memoria también:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Me encantaría que alguien corrija los malentendidos que tengo que están creando estos conflictos aparentes.

¡Gracias!

EDITAR para Rahul

Salida de cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
Jonás
fuente
# 1) El comando de arriba a ordenar por la memoria no es m , es M . # 2) Para ver todos los procesos, intente ** ps ax -o command, rss **; lo que corriste solo muestra los tuyos.
tink
Por favor, también nos actualiza la salida decat /proc/meminfo
Rahul Patil
55
linuxatemyram.com
Michael Hampton
@tink, gracias por esa explicación. Lo intenté ps ax -o rss | awk '{ sum+=$1} END {print sum}'ahora y 153156.
Jonás
@RahulPatil, OP actualizado. Tenga en cuenta que los procesos en ejecución pueden ser ligeramente diferentes de los números originales, pero no deberían estar tan lejos. Además, el resultado que obtuve para ti parece no coincidir con el resultado que obtuve por tink en el comentario anterior. Esos fueron tomados con un par de minutos de diferencia.
Jonás

Respuestas:

8

Solo necesitas entender el concepto de memoria

Según su salida de / proc / meminfo, solo necesita notar las siguientes cosas:

Tampones : - Un buffer es algo que aún no se ha "escrito" en el disco. Representa la cantidad de RAM dedicada al bloque de disco de caché. "En caché" es similar a "Buffers", solo que esta vez almacena en caché páginas de la lectura de archivos

En caché : - Un caché es algo que ha sido "leído" del disco y almacenado para su uso posterior. En general, puede considerar el área de caché como otra RAM "libre", ya que se reducirá gradualmente si la aplicación requiere más memoria.

Es suficiente entender que tanto "buffers" como "Cached" representan el tamaño de la memoria caché del sistema. Crecen o se reducen dinámicamente según lo solicitado por el mecanismo interno del kernel de Linux.

en Webhosting limpian la memoria caché usando cmd debajo: (en su mayoría configurados en cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Enlace de cita

EDITAR para un requisito más, es decir, por uso de memoria del usuario

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Verifique con el script anterior y avíseme si se muestra correctamente o no.

Rahul Patil
fuente
Gracias rahul. Una pregunta final. Dado free -mque no proporciona una forma de ver la memoria utilizada por usuario, ¿cuál es una forma precisa de determinar cuánta RAM real está consumiendo un usuario en particular? Esto aparece al monitorear su propio uso de memoria en un servidor compartido, por ejemplo.
Jonás
@Jonah He actualizado ... por favor verifique y hágamelo saber
Rahul Patil
ese script no funciona como se esperaba ... pero estoy intentando actualizarlo pronto
Rahul Patil
@ Jonás, gracias por aceptar mi respuesta ... pero muchas gracias por MichaelHampton ...
Rahul Patil
2

Buena respuesta @RahulPatil.

Otro punto a considerar sobre ps o top es el siguiente

Esta herramienta [exmap] es más precisa que ps o top porque tiene en cuenta las bibliotecas compartidas en uso por múltiples aplicaciones. Por ejemplo, si dos aplicaciones están usando la misma biblioteca compartida, que ocupa 1 MB de memoria, ps mostrará ambas aplicaciones con 1 MB de memoria adicional, mientras que exmap muestra más correctamente cada aplicación con 500 KB. Esta mayor precisión es particularmente importante para evaluar entornos de escritorio como KDE y GNOME, que hacen un uso muy intensivo de las bibliotecas compartidas entre aplicaciones.

Vía ibm / developerworks / linux_memory

Dado que su pregunta se refiere a un servidor sin cabeza, no estoy seguro de cuánto tendrá realmente el doble informe superior o ps.

Yeow_Meng
fuente
0

Me temo que pasamos por alto lo obvio porque es un "por supuesto" para la mayoría de nosotros.

Jonah, perdóname si me equivoco, pero tus preguntas suenan como si no te hubieras dado cuenta de que todos estos valores, el uso de la CPU en particular, normalmente variarán bastante de un segundo a otro.

El uso de la CPU puede pasar de un solo dígito al 100% instantáneamente a medida que se inicia un nuevo proceso, pero rápidamente (con suerte) vuelve al rango inferior al 50%.

El uso de la memoria cambia más lentamente, pero allí, Linux intenta usar la memoria que no está en uso activo ejecutando procesos para acceder al disco en "caché". Por ejemplo, intenta predecir qué será necesario leer desde el disco a continuación, como tal vez el resto de un archivo grande después de leer una parte, y precargarlo en la memoria caché. Algunos de los valores de uso de memoria incluyen tanto la memoria utilizada por los procesos como la memoria utilizada para el almacenamiento en caché. En un sistema que ha estado funcionando por un tiempo, los dos combinados probablemente serán 80-90% o más.

Considere también que el proceso que ejecuta para mostrar el uso, como top, también usa CPU y memoria. Si escribiste una secuencia de comandos con un bucle para informar el uso continuo de la CPU, casi con seguridad siempre mostrará el 100% porque el acto de informar el uso en sí (sin sleep retrasos) usa toda la CPU.

DocSalvager
fuente
Doc, gracias por la idea, pero este no era el problema
Jonás,