He instalado Ubuntu 14.10 en un servidor. La tarea principal del servidor es ejecutar una instalación de MongoDB junto con varias aplicaciones NodeJS. Las aplicaciones NodeJS se ejecutarán continuamente y aceptarán solicitudes externas.
De vez en cuando, llegarán grandes solicitudes, lo que provocará que alguna aplicación NodeJS utilice mucha RAM durante un corto período de tiempo. He estado tratando de monitorear esto pero no estoy seguro de qué hacer con mis hallazgos.
Hasta ahora he usado dos comandos para obtener información sobre el uso de RAM. Estos son
free -m
y
sudo htop
El primero muestra esto:
total used free shared buffers cached
Mem: 3442 3158 283 6 111 1203
-/+ buffers/cache: 1842 1599
Swap: 0 0 0
Cuando miro esto, diría que hay alrededor de 280 MB de RAM libres. Lo cual no parece mucho.
htop me dice lo siguiente:
1 [||| 0.8%] Tasks: 61, 129 thr; 2 running
2 [||| 1.0%] Load average: 1.16 1.15 0.93
Mem[|||||||||||||||||||||||||||||||||||||1979/3442MB] Uptime: 29 days, 00:23:31
Swp[ 0/0MB]
Realmente no sé cómo leer esto. ¿Puede alguien ayudarme aquí?
Supongo que mi pregunta al final se reduce a esto:
- ¿Cómo puedo obtener una idea de cuánta RAM hay disponible?
- ¿Cuándo la memoria RAM es muy poca? ¿300 MB se consideran muy poco? ¿Peligrosamente así?
Respuesta1
TL;DR: No tiene que preocuparse siempre que la -/+ buffers/cache
fila muestre suficiente memoria libre. Si muestra poca memoria libre y se le swap
envía continuamente al disco, entonces debe preocuparse.
Explicación:
Estás bien con tu escenario actual de uso de RAM. Tomemos la salida de free -m
para descomponerla:
Todas las columnas de free -m
se explican por sí mismas. Lo importante a tener en cuenta es que no necesita alarmarse cuando el uso de la memoria es alto sin ver la cantidad de memoria almacenada en caché y en buffer.
Del resultado, ha utilizado 3158 MB de sus 3442 MB de RAM; una simple resta diría que solo tiene 283 MB libres para asignarlos a nuevos programas. Esto no está bien, también debe mirar las columnas cached
y , mostrará una cantidad de datos del disco almacenados en caché por RAM para un acceso más rápido a los archivos de uso común y mostrará la cantidad de datos que se escribirán en el disco.buffers
cached
buffered
Como sabes, el acceso al disco es mucho más lento que la RAM, por lo que para mejorar el rendimiento es bueno almacenar algunos de los datos de los discos en la RAM. Tiene 1203 MB de datos en caché y 111 MB de datos almacenados en búfer. Es bueno que su memoria almacene en caché esta cantidad sin simplemente mantener esta cantidad de RAM inactiva. Mejorará enormemente tu rendimiento.
Para obtener la cantidad real de RAM que se está utilizando sin almacenamiento en caché/búfer, mire la -/+ buffers/cache:
fila. Este resultado se muestra restando la cantidad almacenada en caché/búfer. Como puedes ver, tienes 1599 MB libres, por lo que todo parece estar bien en este estado. Si ve que los valores en esta fila son bajos, entonces debe preocuparse y observar el uso de RAM.
También tenga en cuenta que, cuando se va a iniciar un nuevo programa y no hay suficiente memoria después del almacenamiento en caché, los cachés más antiguos se borrarán automáticamente para dejar espacio para el nuevo programa. Por lo tanto, siempre que el uso real de la memoria no sea alto y se esté intercambiando continuamente al disco, es bueno tener una cantidad sustancial en el caché, ya que "usa" la memoria de manera eficiente.
Respuesta2
heemayl ya ha cubierto una buena parte de información sobre la memoria disponible real. Mi publicación aquí es simplemente un par de líneas que puede agregar .bashrc
como alias para usar como descripción general rápida del uso real:
free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
Y salida de muestra:
$ free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
Used 1.2G Out of 5.6G
Si está interesado en una investigación más profunda de la memoria, utilice cat /proc/meminfo
, que enumera una gran cantidad de información, yeste blogLe ayudará a comprender cómo free
el comando calcula el contenido de ese archivo.