Cómo liberar manualmente la memoria de Linux

  
 

Siempre hay muchos amigos que tienen preguntas sobre la administración de memoria de Linux. En la nueva versión del núcleo, parece proporcionar una nueva solución a este problema, especialmente para la referencia. Finalmente, también adjunté mis comentarios sobre este método, y doy la bienvenida a todos a discutirlo juntos. Cuando se accede al archivo con frecuencia en Linux, la memoria física se agotará rápidamente. Cuando el programa finalice, la memoria no se liberará normalmente, sino que siempre se almacenará en caché. Esta pregunta parece ser mucha gente que pregunta, pero no han visto ninguna buena solución. Entonces déjame hablar sobre este tema.

Primero, generalmente el primer comando libre: referencia [root @ server ~] # free -mtotal usamos buffers compartidos gratuitos cachedMem: 249 163 86 0 10 94 - /+ buffers /cache: 58 191Swap: 511 0 511

Donde: Total de memoria utilizada utilizada memoria libre libre compartida compartida por múltiples procesos buffers Caché de búfer y caché Tamaño de caché de disco de caché de página - buffers /caché Memoria: se utiliza – buffers – cached + buffers /caché: free + buffers + cached

Memoria disponible = free memoria + buffers + cached.

Con esta base, puedes saber que ahora tengo 163 MB, gratis es 86 MB, el búfer y el caché son 10 MB, 94 MB. Así que veamos si hay algún cambio en la memoria si ejecuto el archivo de copia. Referencia [root @ server ~] # cp -r /etc ~ /test /[root @ server ~] # free -mtotal usamos búferes compartidos gratuitos usados ​​cachedMem : 249 244 4 0 8 174 - /+ buffers /cache: 62 187Swap: 511 0 511

Después de la ejecución de mi comando, usado es 244MB, gratis es 4MB, buffers es 8MB, guardado en caché es 174MB, día Oh, todos se comen por caché. No se preocupe, esto es para mejorar la eficiencia de la lectura de archivos.

Con el fin de mejorar la eficiencia del acceso al disco, Linux ha realizado un diseño cuidadoso, además del almacenamiento en caché (para VFS, acelerar el nombre de la ruta del archivo a la conversión del inodo), también adoptó dos métodos principales de caché: BufferCache y PageCache. El primero es para leer y escribir bloques de disco, y el segundo es para leer y escribir inodos de archivos. Estos cachés reducen efectivamente el tiempo de las llamadas del sistema de E /S (como lectura, escritura, getdents).

Entonces, algunas personas dicen que, por un tiempo, Linux liberará automáticamente la memoria utilizada. Después de esperar un rato, volvamos a intentarlo de forma gratuita y veamos si hay un lanzamiento. Referencia [root @ prueba de servidor] # free -mtotal utilizado buffers compartidos libres cachedMem: 249 244 5 0 8 174 - /+ buffers /cache: 61 188Swap: 511 0 511

Parece que no hay cambios.
(De hecho, la administración de memoria también está relacionada con Swap)

¿Entonces puedo liberar manualmente esta memoria? ¡La respuesta es sí!

Segundo, manual release cache /proc es un sistema de archivos virtual, podemos leer y escribir operaciones como un medio de comunicación con la entidad del kernel. En otras palabras, puede ajustar el comportamiento del kernel actual modificando los archivos en /proc. Entonces podemos liberar memoria ajustando /proc /sys /vm /drop_caches. La operación es la siguiente: Referencia [root @ server test] # cat /proc /sys /vm /drop_caches0

Primero, el valor de /proc /sys /vm /drop_caches por defecto es 0. Referencia [root @ server test] # sync

Ejecute manualmente el comando sync (descripción: el comando sync ejecuta la subrutina sync. Si debe detener el sistema, ejecute el comando sync para garantizar la integridad del sistema de archivos. El comando sync Todos los buffers del sistema no escritos se escriben en el disco, y contienen nodos i modificados, E /S de bloque retardado y archivos de mapeo de lectura-escritura. Referencia [prueba del servidor raíz] # echo 3 > /proc /sys /Vm /drop_caches [prueba del root @ server] # cat /proc /sys /vm /drop_caches3

Establezca el valor /proc /sys /vm /drop_caches en la referencia 3 [root @ server test] # free -mtotal used Búferes compartidos gratuitos almacenados en cachéMem: 249 66 182 0 0 11 - /+ búferes /caché: 55 194Swap: 511 0 511

Ejecute el comando libre nuevamente, encontrará que ahora se usa 66MB, gratis es 182MB, buffers es 0MB El caché es de 11MB. Así que efectivamente libere el búfer y la caché.

◎ El uso de /proc /sys /vm /drop_caches se describe a continuación. /proc /sys /vm /drop_caches (desde Linux 2.6.16) Al escribir en este archivo, el kernel deja caer cachés limpios , aberturas e inodos de la memoria, lo que hace que la memoria se vuelva libre.

Para liberar pagecache, use echo 1 > /proc /sys /vm /drop_caches; libre de inentradas e inodos, use echo 2 > /proc /Sys /vm /drop_caches; para liberar pagecache, dentries e inodes, use echo 3 > /proc /sys /vm /drop_caches.

Debido a que esta es una operación no destructiva y los objetos sucios no se pueden enviar, el usuario Debería ejecutarse la sincronización primero.

Tres, mi opinión El artículo anterior ha sido una cuestión de muchos usuarios en la administración de memoria de Linux, dada una respuesta "intuitiva" de comparación, me siento un poco como Compromiso por parte del equipo central de desarrollo. Tengo dudas acerca de si necesito usar este valor, o mencionar este valor al usuario: Referencia 1, de man, puede ver que este valor solo está disponible desde la versión principal después de 2.6.16, que es la versión anterior de < u> Sistema operativo
, como Red Flag DC5.0, RHEL 4.x antes de la versión no; 2, si la memoria del sistema es suficiente para observar, todavía tengo la intención de ver el uso del intercambio y si /so two El tamaño del valor;

La pregunta común para los usuarios es: ¿por qué la memoria es tan pequeña, no se libera la memoria después de cerrar la aplicación? Pero, de hecho, todos sabemos que esto se debe a que la administración de memoria de Linux es diferente de Windows
, libre pequeña no significa que la memoria no sea suficiente, debe ser el último valor de la segunda línea de libre: referencia - /+ buffers /cache: 58 191

Esta es la cantidad de memoria disponible para el sistema. El proyecto real nos dice que si la aplicación tiene problemas como pérdidas de memoria y desbordamientos, el uso del intercambio se puede juzgar con relativa rapidez, pero lo anterior es más difícil de ver. Por el contrario, si en este momento, le decimos al usuario que modifique un valor del sistema, &quoquo; can &quoquo; free memory, free es grande. ¿Qué piensan los usuarios? ¿No sentirá que el sistema operativo " tiene problemas "? Entonces, creo que dado que el núcleo puede borrar rápidamente el búfer o el caché, no es difícil hacerlo (esto es obvio en la operación anterior), pero el núcleo no lo hace (el valor predeterminado es 0), no deberíamos Sólo tienes que cambiarlo.

Copyright © Conocimiento de Windows All Rights Reserved