it-swarm-es.com

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

Tengo un servidor Red Hat Linux doméstico relativamente pequeño (aproximadamente 8 GB de RAM). No lo uso para mucho más que ejecutar algunas aplicaciones locales para realizar 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 comprobar los contadores del sistema con herramientas como NMON y TOP, la memoria libre total del sistema es relativamente baja (del orden de unos cientos de MB), mientras que la memoria activa para la base de datos y el servidor web sigue siendo baja (solo consumiendo 3 GB combinados). 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 memoria utilizada de los procesos en ejecución?

9
Aaron K

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 búfer para varias IO operaciones de transferencia.

Otra cosa que puede confundirlo es que no puede simplemente sumar la memoria en uso por todos los procesos en ejecución para obtener una cifra total de memoria en uso. Si intentara esto, rápidamente descubriría 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 Copy-On-Write asignación de memoria, IO mapeado en memoria y bibliotecas dinámicas compartidas .
  2. El sistema operativo tiene la libertad de prometer más memoria a la aplicación de la que realmente ha proporcionado. 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 utilicen toda esa memoria.

Hay un artículo reciente sobre lwn.net discutiendo este tema .

19
Dave Cheney

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

Ejecutar free -m en el cuadro 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 de 147Meg con casi 4G en caché para las 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
4
Ryaner

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

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

Si pudiera publicar el resultado del comando 'gratis' detallado anteriormente, podremos ver si este es el problema o no.

1
Mike Pountney

¿También incluye los campos "almacenados en búfer" y "almacenados en caché"?

1
jj33

Con linux, mire Committed_AS en/proc/meminfo, esta es la cantidad de memoria (real + swap) que el kernel realmente ha prometido a los procesos en ejecución.

Linux usa la memoria de manera muy eficiente, cualquier bloque no prometido a algún proceso se usa para almacenar en caché archivos de acceso reciente/frecuente. 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 da una mejor imagen general.

Si necesita ajustar este comportamiento, actualice su pregunta :)

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

1
Tim Post