(Es probable que sea un poco tarde para el PO, pero esto se le pide muy a menudo, así que voy a darle una oportunidad)
free
normalmente muestra algo como esto:
total used free shared buffers cached
Mem: 8195284 8137708 57576 0 1232328 2651156
-/+ buffers/cache: 4254224 3941060
Swap: 18892216 759852 18132364
La gente tiende para ver la línea Mem:
al intentar averiguar cuánta memoria libre tienen. Por desgracia esa línea es muy engañoso, ya que el núcleo de Linux intenta hacer un uso óptimo de la memoria disponible en (al menos) las siguientes maneras:
Será caché de datos desde el subsistema de E/S (por ejemplo, el disco) , de modo que estará disponible fácilmente si es necesario.
Desalojará activamente los procesos que han estado inactivos durante un tiempo en el espacio de intercambio, a favor del almacenamiento en caché de datos para los procesos activos. Esto tiende a favorecer el rendimiento sobre la capacidad de respuesta, por lo que algunas personas ajustan su kernel para cambiar este comportamiento.
El primer punto es la fuente de confusión con respecto a free
, porque la línea Mem:
incluye la memoria utilizada para el almacenamiento en caché en la cantidad de memoria utilizada. El kernel, sin embargo, guardará la mayor cantidad de memoria posible por razones de rendimiento. De hecho, en cualquier sistema Linux que haya estado activo durante algún tiempo, la memoria libre tiende a ser cercana a cero: la memoria no utilizada es memoria desperdiciada.
La memoria caché, sin embargo, puede ser liberada por el kernel si es necesario por otro proceso. Si bien tendrá un impacto en el rendimiento de E/S en un grado, otros procesos pueden tener más memoria sin utilizar el espacio de intercambio. Por lo tanto, para la mayoría de los intentos, esa memoria es gratuita.
Por eso free
incluye una segunda línea, donde la memoria caché se considera libre:
-/+ buffers/cache: 4254224 3941060
Esta segunda línea es lo que la gente debe mirar cuando quieren saber si tienen suficiente memoria libre para una cierto propósito.
En el ejemplo anterior, según la línea Mem:
hay ~ 57 MB de memoria libre. Sin embargo, si uno lee la segunda línea, hay aproximadamente 3.9 GB que se pueden usar sin forzar a los procesos activos a intercambiar.Como nota al margen, también hay cerca de 760 MB de datos poco utilizados que se han intercambiado, para tener más espacio en la memoria principal para los procesos y el almacenamiento en caché.
Más o menos al mismo tiempo, el contenido de /proc/meminfo
:
MemTotal: 8195284 kB
MemFree: 57660 kB
Buffers: 1232352 kB
Cached: 2651156 kB
SwapCached: 119936 kB
.
.
.
MemTotal
: la memoria física disponible detectada por el núcleo.
MemFree
: la memoria física no utilizada: la memoria libre que se muestra en la línea Mem:
de free
.
Buffers
: almacenamiento relativamente temporal de bloques de disco sin formato.
Cached
: memoria caché en memoria para archivos leídos desde el disco. No incluye la memoria SwapCached.
SwapCached
: memoria que una vez se intercambió, luego se volvió a cambiar pero aún está en el espacio de intercambio. Si es necesario, sus contenidos pueden descartarse (¡muy rápido!), Sin tener que cambiarlos (más despacio).
lo tanto, para tener una estimación semi-exacta de la memoria que está realmente disponible
MemFree + Buffers + Cached + SwapCached
es un buen punto de partida - y el uno free
espectáculos en que la segunda línea.
Naturalmente, la gestión de memoria y las estadísticas y mediciones relacionadas son más complicadas que esto. Los números que se muestran en free
son meras estimaciones en el mejor de los casos, ya que hay muchas otras variables a tener en cuenta si desea profundizar. Para las personas que realizan regularmente la optimización del uso de la memoria, esto es casi una forma de arte.
EDIT:
Un enlace un tanto humorística sobre este "problema":
http://www.linuxatemyram.com/
EDIT 2:
Para confirmar el comentario sobre el análisis de uso de memoria casi de ser una forma de arte :
Incluso free
pierde una gran parte de los datos en caché en los sistemas Linux modernos. De /proc/meminfo
en mi sistema:
SReclaimable: 2253576 kB
Eso es alrededor de 2 GB de memoria que se utiliza por el sistema slab asignador de entradas de directorio de caché y tal y es recuperable (es decir, que se puede borrar y usada por los procesos si es necesario). Sin embargo, free
no lo considera memoria caché y no lo ingresa en ninguno de sus cálculos y, por lo tanto, aparece como memoria utilizada.
La utilidad slabtop
, si está disponible, permite al administrador del sistema averiguar para qué se utiliza la memoria caché slab.
Una forma (para el usuario root) para tener free
muestran el uso real de la memoria del sistema es el siguiente:
# swapoff -a
# sync
# echo 3 > /proc/sys/vm/drop_caches
# free
total used free shared buffers cached
Mem: 8195284 3181468 5013816 0 8656 228832
-/+ buffers/cache: 2943980 5251304
Swap: 0 0 0
# swapon -a
El primer comando desactiva el espacio de intercambio. No debe emitirse si la memoria disponible puede no ser suficiente para contener los datos que se han intercambiado; en ese caso, debe tenerse en cuenta la línea gratuita Swap:
en sus cálculos de uso de memoria.
El segundo comando empuja todos los datos almacenados en el disco. Permite liberar más memoria caché en el siguiente paso.
El tercer comando es el más importante del conjunto: obliga al kernel a descartar la mayor cantidad de datos almacenados en caché (caché de página, entradas de directorio, inodos, etc.).
Luego, free
finalmente muestra lo que los procesos en ejecución realmente usan en su línea -/+ buffers/cache:
. Es bastante notorio que incluso después de descartar todos los datos almacenados en caché, el kernel comienza a almacenar en caché rápidamente; en este caso, ya alcanzó casi 250 MB de datos almacenados en caché en pocos segundos.
El comando final habilita nuevamente el espacio de intercambio, solo es necesario si también se utilizó el primer comando.
Cabe señalar que estos comandos deben ser ejecutados por el usuario raíz para tener los privilegios necesarios.
¿Conoce el comando 'free'? –
las estadísticas del comando gratuito son las mismas que las dadas por/proc/meminfo – Manish