¿Por qué Red Hat Linux informa menos memoria libre en el sistema de la que está realmente disponible?

9

Tengo un servidor Red Hat Linux en casa relativamente pequeño (aproximadamente 8 GB de RAM). No lo uso para mucho más que ejecutar algunas aplicaciones locales para hacer un seguimiento de varias cosas. Las únicas cosas reales que se ejecutan en la caja son una base de datos y un servidor web.

Me he dado cuenta de que al verificar los contadores del sistema utilizando herramientas como NMON y TOP, la memoria libre total del sistema es relativamente baja (del orden de unos pocos cientos de MB), mientras que la memoria activa para la base de datos y el servidor web todavía es baja (solo consumiendo un combinado de 3 GB). Incluso cuando se incluyen todos los demás procesos en ejecución, la memoria total consumida es inferior a 4 GB.

¿Por qué Red Hat Linux informa menos memoria libre que la memoria total menos la suma total de la memoria utilizada de los procesos en ejecución?

Aaron K
fuente

Respuestas:

19

No confunda la memoria libre con la memoria no utilizada. Memoria libre, en el mundo de Unix es una página de memoria física que no tiene datos lógicos asignados. La memoria no utilizada tiene algunos datos asignados, pero actualmente no está en uso activo por un proceso en ejecución.

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

Linux (y todos los sistemas operativos Unix) intentan tener la menor cantidad de memoria libre posible. En su lugar, utilizan memoria que no está asignada activamente a procesos en el sistema operativo en ejecución para cosas como caché de archivos y memorias intermedias para diversas operaciones de transferencia de E / S.

Otra cosa que puede confundirte es que no puedes simplemente agregar la memoria en uso por todos los procesos en ejecución para obtener una cifra total de memoria en uso. Si intenta esto, descubrirá rápidamente que sus aplicaciones parecen estar usando más memoria de la que realmente existe en la máquina. Esto es por dos razones

  1. La memoria se puede compartir entre varios procesos, a través de la asignación de memoria de Copia en escritura , E / S mapeada en memoria y bibliotecas dinámicas compartidas .
  2. El sistema operativo es libre de prometer más memoria a la aplicación de la que realmente ha suministrado. La teoría es que la mayoría de los escritores de aplicaciones prefieren pedir grandes cantidades de memoria de una sola vez, para evitar gastos generales, y es posible que no usen toda esa memoria.

Hay un artículo reciente en lwn.net que trata este tema .

Dave Cheney
fuente
1
Aquí también se proporciona una explicación simple: linuxatemyram.com
Steven T. Snyder
4

Linux almacenará activamente los accesos del sistema de archivos en la memoria para proporcionar tiempos de acceso al disco más rápidos. No es nada de qué preocuparse.

Ejecutar free -m en la caja le dará una mejor idea de dónde se está utilizando la memoria.

A continuación se muestra la salida extraída de una de mis cajas. La memoria libre es 147Meg con casi 4G en caché para solicitudes de acceso al sistema de archivos.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722
Ryaner
fuente
1

¿También incluye los campos "almacenados en memoria intermedia" y "en caché"?

jj33
fuente
1

Con Linux, mire Committed_AS en / proc / meminfo, esta es la cantidad de memoria (real + intercambio) que el núcleo realmente ha prometido para ejecutar procesos.

Linux usa la memoria de manera muy eficiente, cualquier bloque no prometido para algún proceso se usa para almacenar en caché los archivos accedidos recientemente / con frecuencia. Por lo tanto, es típico que Linux use el 90% de toda la memoria física disponible poco después del arranque.

Mire lo que el núcleo se ha comprometido a proporcionar ... y el uso sucio (intercambio), esto le brinda una mejor imagen general.

Si necesita ajustar este comportamiento, actualice su pregunta :)

Este es el MO estándar para Linux ... algunas distribuciones ajustan la administración de memoria para satisfacer sus necesidades a través de sysctl. Sin embargo, lo que informas es bastante típico entre todos.

Tim Post
fuente
1

¿Qué tipo de núcleo está ejecutando en el sistema? Un kernel de 32 bits solo reportará alrededor de 3.6 GB de memoria, a menos que esté compilado con PAE habilitado.

Dicho esto, si se trata de una versión moderna de Redhat Enterprise Linux (o CentOS), v3 en adelante, el núcleo predeterminado de 32 bits lo habilitará.

Si pudiera publicar la salida del comando 'libre' detallado anteriormente, podremos ver si este es el problema o no.

Mike Pountney
fuente