Ventanas.  virus  Cuadernos.  Internet.  oficina.  Utilidades.  Conductores

Recientemente en uno de Servidores virtuales ante el problema de la escritura larga en el disco. Y bajo este tema encontré uno interesante, que analiza en detalle el tema del almacenamiento en caché de las operaciones de escritura en disco en Linux. Este artículo será traducido hoy.

Almacenamiento en caché en Linux

Al escribir datos en el disco (por cualquier programa), Linux almacena en caché esta información en un área de memoria llamada Page Cache. La información sobre esta área de memoria se puede ver usando los comandos gratis, vmstat o arriba. La información completa sobre esta área de memoria se puede encontrar en el archivo /proc/meminfo. A continuación se muestra un ejemplo de este archivo en un servidor con 4 GB de RAM:

MemTotal: 3950112 kB MemFree: 622560 kB Búferes: 78048 kB En caché: 2901484 kB SwapCached: 0 kB Activo: 3108012 kB Inactivo: 55296 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 3950112 kB LowFree: 6225 60 kB SwapTotal: 4198272 kB SwapFree : 4198244 kB Sucio: 416 kB Writeback: 0 kB Mapeado: 999852 kB Slab: 57104 kB Committed_AS: 3340368 kB PageTables: 6672 kB VmallocTotal: 536870911 kB VmallocUsed: 35300 kB VmallocChunk: 5 3683 5611 kB HugePages_Total: 0 HugePages_Free: 0 Hugepagesize: 2048 kB

El tamaño de Caché de página se muestra en el parámetro "Caché", en este ejemplo es de 2.9 GB. Cuando se escriben páginas en la memoria, aumenta el tamaño del parámetro "Dirty". Cuando comience a escribir directamente en el disco, el parámetro "Reescritura" aumentará hasta que finalice la grabación. Es difícil ver "Reescritura" configurada en alto, porque solo se incrementa durante el sondeo, cuando las operaciones de entrada/salida (E/S) están en cola pero aún no se escriben en el disco.
Linux generalmente escribe datos del caché al disco usando un proceso pdflush. En un momento dado, se están ejecutando de 2 a 8 subprocesos en el sistema pdflush. En archivo /proc/sys/vm/nr_pdflush_threads puedes ver cuanto este momento corrientes activas. Cada vez que todos los subprocesos de pdflush existentes están ocupados durante al menos 1 segundo. Los subprocesos nuevos intentan escribir datos en las colas de dispositivos libres, de modo que para cada dispositivo activo haya 1 subproceso que vacíe datos de la memoria caché. Cada vez que pasa un segundo sin actividad de pdflush, se elimina 1 hilo. En Linux, puede establecer el número mínimo y máximo de subprocesos de pdflush.

Configurando pdflush

Cada flujo de pdflush está controlado por varios parámetros en /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs(por defecto 500): en centésimas de segundo. Este parámetro indica con qué frecuencia se reanuda pdflush para escribir datos en el disco. Por defecto, reanuda 2 subprocesos cada 5 segundos.
    Puede haber un comportamiento no documentado que impida los intentos de reducir los centisecs de reescritura sucia para un almacenamiento en caché de datos más agresivo por parte del proceso pdflush. por ejemplo, en primeras versiones kernel 2.6 Linux en el archivo mm/page-writeback.c, el código incluía la lógica que describía "si escribir en el disco lleva más tiempo que el parámetro dirty_writeback_centisecs, entonces debe establecer el intervalo en 1 segundo". Esta lógica se describe únicamente en el código del kernel y su funcionamiento depende de la versión del kernel de Linux. Dado que esto no es muy bueno, por lo tanto, estará protegido contra la reducción de este parámetro.
  • /proc/sys/vm/dirty_expire_centisegundos(predeterminado 3000): en centésimas de segundo. Este parámetro especifica cuánto tiempo se pueden almacenar en caché los datos antes de escribirlos en el disco. El valor predeterminado es muy largo: 30 segundos. Esto significa que durante el funcionamiento normal, hasta que se hayan escrito suficientes datos en la memoria caché para llamar a otro método pdflush, Linux no escribirá ningún dato en el disco que haya estado en la memoria caché durante menos de 30 segundos.
  • /proc/sys/vm/dirty_background_ratio(predeterminado 10): porcentaje máximo memoria de acceso aleatorio, que puede llenarse con la memoria caché de la página antes de que los datos se escriban en el disco. Algunas versiones del kernel de Linux pueden establecer este parámetro en 5%.

    La mayoría de la documentación describe esta configuración como un porcentaje de la RAM total, pero según códigos fuente El kernel de Linux no lo es. Mirando meminfo, el parámetro dirty_background_ratio se calcula a partir del valor MemFree + Caché - Asignado. Entonces, para nuestro sistema de demostración, el 10 % es un poco menos de 250 MB, pero no 400 MB.

Total: ¿Cuándo empieza a escribir pdflush?

En la configuración predeterminada, los datos escritos en el disco permanecen en la memoria hasta que:

  • tienen más de 30 segundos en la memoria;
  • Las páginas en caché ocupan más del 10% de la memoria de trabajo.

Si las operaciones de escritura ocurren con frecuencia en el servidor, un día se alcanzará el parámetro dirty_background_ratio y podrá ver que toda la escritura del disco pasa solo por este parámetro sin esperar a que caduque el parámetro dirty_expire_centiseconds.

Proceso de escritura de la página

Parámetro /proc/sys/vm/proporción_sucia(predeterminado 40): el porcentaje máximo de RAM total que se puede asignar a la memoria caché de la página antes de que pdflush escriba datos en el disco.

Nota: Mientras se escribe en el disco, todos los procesos están bloqueados contra escritura, no solo el que llenó el búfer de escritura. Esto puede hacer que un proceso bloquee todas las operaciones de E/S en el sistema. gastar esto

Recomendaciones para optimizar Linux para operaciones que requieren escrituras frecuentes

Por lo general, las personas cuando intentan aumentar la productividad subsistema de disco enfrentar el problema de que Linux almacena demasiada información a la vez. Esto es especialmente difícil para las operaciones que requieren la sincronización del sistema de archivos mediante llamadas fsync. Si durante una llamada de este tipo hay una gran cantidad de datos en la memoria caché, entonces el sistema puede "colgarse" hasta que finalice esta llamada.
Otro problema común ocurre porque es necesario escribir demasiado antes de que comience la escritura en el disco físico, la E/S ocurre con más frecuencia que durante el funcionamiento normal. Obtendrá períodos más largos sin escribir en el disco hasta que la memoria caché grande esté llena, momento en el que uno de los activadores de pdflush se dispara y los datos se escriben a la velocidad máxima.

relación_de_fondo_sucio: La principal herramienta de ajuste, por lo general reduce este ajuste. Si su objetivo es reducir la cantidad de datos almacenados en la memoria caché para que los datos se escriban en el disco de forma incremental en lugar de todos a la vez, reducir esta configuración es la forma más eficiente de hacerlo. El valor predeterminado es más aceptable para sistemas con mucha RAM y discos lentos.

proporción_sucia: La segunda configuración más importante para ajustar. Al reducir en gran medida esta configuración, las aplicaciones que necesitan escribir en el disco se bloquearán por completo.

sucio_expire_centisecs: Trate de reducir, pero no mucho. Le permite reducir el tiempo que pasan las páginas en el caché antes de escribir en el disco, pero esto reducirá significativamente la velocidad promedio de escritura en el disco, porque. es menos eficiente. Esto se manifestará especialmente en sistemas con discos lentos.

Instrucciones para configurar parámetros

En archivo /etc/sysctl.conf ingrese, por ejemplo:

vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Después de sincronizar el caché y los datos del disco, borre el caché y guarde la configuración.

sincronizar; echo 3 > /proc/sys/vm/drop_caches; sysctl-p

Cuando se trata de optimizar el rendimiento de un sistema Linux, la memoria física es el factor más importante. Naturalmente, Linux ofrece muchas opciones para controlar el uso del preciado recurso de memoria. Las diversas herramientas difieren en términos de su granularidad de monitoreo (por ejemplo, en todo el sistema, por proceso, por usuario), interfaz (por ejemplo, gráfica, línea de comando, ncurses) o modo de operación (por ejemplo, modo interactivo, por lotes).

Aquí hay una lista parcial de GUI o programas de línea de comandos para darle la opción de verificar la memoria usada y libre en las plataformas Linux.

1. /proc/meminfo

La forma más fácil de verificar el uso de RAM es a través de /proc/meminfo. Este archivo virtual actualizado dinámicamente es, de hecho, la fuente de información de visualización para muchas otras herramientas relacionadas con la memoria, como las herramientas gratuitas, superiores y ps. De la cantidad disponible/ memoria física hasta la cantidad de búfer que se espera que se vuelva a escribir en el disco, /proc/meminfo tiene todo lo que desea saber sobre el uso memoria del sistema. La información de la memoria del proceso también está disponible en /proc/ /statm y /proc/ /estado

$ gato /proc/meminfo

2.superior

El comando atop es un sistema interactivo basado en ncurses y un observador de procesos para el entorno de la terminal. Muestra una actualización dinámica Breve información sobre las fuentes del sistema (CPU, memoria, red, E/S, kernel) con advertencias de colores en caso de alta carga del sistema. También puede clasificar procesos (o usuarios) en orden de su mayor consumo de recursos, de modo que Administrador de sistema puede decir qué proceso o usuario es responsable de iniciar el sistema. Los informes de estadísticas de memoria incluyen memoria total/libre, memoria en caché/en búfer e información de memoria virtual.

$ sudo encima

3 gratis

El comando gratuito es una forma rápida y fácil de obtener una descripción general del uso de la memoria obtenida de /proc/meminfo. Muestra una instantánea de la memoria física total/disponible y la paginación del sistema, así como el espacio de búfer utilizado/libre en el kernel.

Monitoreo del sistema 4GNOME

El monitor del sistema GNOME es aplicación de gráficos que se muestra una breve historia uso de recursos del sistema para CPU, memoria, espacio de intercambio y red. También ofrece un proceso de monitoreo para el uso de CPU y memoria.

$ gnome-sistema-monitor

5.htop

El comando htop es un visor de procesos interactivo basado en ncurses que muestra el uso de memoria en tiempo real por proceso. Puede informar el tamaño de la memoria principal (RSS) utilizada por el proceso, el tamaño total del programa en la memoria, el tamaño de la biblioteca, el tamaño de la página compartida y el tamaño de la página sucia (en el caché). ) para todos los procesos en ejecución. Puede desplazarse horizontal o verticalmente por la lista (ordenada) de todos los procesos.

Monitoreo del sistema 6KDE

Mientras que el escritorio GNOME tiene el Monitor del sistema GNOME, el escritorio KDE tiene su propia contraparte: el Monitor del sistema KDE. Su funcionalidad es en su mayoría similar a la versión de GNOME, es decir, muestra el historial en tiempo real del uso de recursos del sistema, así como el consumo de CPU/memoria por procesos individuales.

$ksysguard

7.memstat

La utilidad memstat es útil para identificar qué proceso(s) ejecutable(s) y bibliotecas compartidas están consumiendo memoria virtual. Dada la identificación del proceso, memstat descubre cuánta memoria virtual está siendo utilizada por el código ejecutable, los datos y las bibliotecas compartidas asociados del proceso.

$ memstat-p

8.mon

La utilidad nmon es una herramienta de evaluación comparativa del sistema basada en ncurses que supervisa la CPU, la memoria, la E/S del disco, el kernel, el sistema de archivos y las fuentes de red de forma interactiva. Sobre el uso de la memoria, puede mostrar información como memoria total/libre, espacio de intercambio, memoria almacenada en búfer/caché, estadísticas de carga/descarga de memoria virtual, todo en tiempo real.

9 ps

El comando ps puede mostrar el uso de memoria de procesos individuales en tiempo real. La información de uso de la memoria que se muestra incluye %MEM (porcentaje de memoria física utilizada), VSZ (memoria virtual total utilizada) y RSS (memoria física total utilizada). Puede ordenar la lista de procesos usando la opción "-ordenar". Por ejemplo, para ordenar en RSS descendente:

$ ps aux --ordenar -rss

10. chismoso

El comando smem le permite medir el uso de la memoria física de varios procesos y usuarios según la información disponible en /proc. Esta utilidad utiliza la métrica proporcionalmente tamaño fijo(PSS), para una evaluación precisa del uso del proceso Tamaño de Linux memoria eficiente. El análisis del uso de la memoria se puede exportar a cuadros gráficos en forma de barras y libros divididos.

$ sudo smem --pie nombre -c "pss"

11. parte superior

El comando superior ofrece monitoreo en tiempo real de procesos en ejecución junto con varias estadísticas de procesos sobre el uso de recursos. La información relacionada con la memoria incluye %MEM (porcentaje de memoria utilizada), VIRT (memoria virtual total utilizada), SWAP (cantidad de memoria virtual intercambiada), CÓDIGO (cantidad de memoria física asignada para la ejecución de código), DATA (cantidad de memoria física asignada para datos no ejecutables), RES (cantidad total de memoria física utilizada, CÓDIGO+DATOS) y SHR (cantidad de memoria potencialmente compartida con otros procesos). Puede ordenar la lista de procesos según el uso o el tamaño de la memoria.

12. vmstat

La utilidad de línea de comandos vmstat muestra estadísticas inmediatas y promedio para varias actividades del sistema, incluidas la CPU, la memoria, las interrupciones y la E/S del disco. Como fuente de información de la memoria, este comando muestra no solo el uso de la memoria física (p. ej., memoria total/usada y memoria intermedia/caché), sino también estadísticas de la memoria virtual (p. ej., memoria cargada/descargada, páginas cargadas/cargadas).

La utilidad de línea de comandos vmstat muestra estadísticas instantáneas y promedio de varias actividades del sistema que cubren CPU, memoria, interrupciones, y disco E/S. En cuanto a la información de la memoria, el comando muestra no solo el uso de la memoria física (p. ej., memoria total/usada y memoria intermedia/caché), sino también estadísticas de la memoria virtual (p. ej., entrada/salida de memoria, entrada/salida intercambiada).

$vmstat -s

Como cualquier otro sistema operativo, Linux es muy eficiente en memoria. La memoria disponible se distribuye libremente entre los procesos, las páginas no utilizadas se descargan en la partición de intercambio del disco y, en caso de desbordamiento de memoria, se activa un mecanismo especial integrado en el kernel que analiza todos los procesos y destruye al culpable.

Cuando cualquier proceso escribe datos en el disco, el kernel los almacena en un caché separado. Muy a menudo, este caché ocupa bastante espacio.

COMO LIBERAR MEMORIA EN LINUX
En cada distribución de linux Se pueden usar tres comandos para borrar la memoria caché de Linux. Y no tenemos que completar ningún proceso. Aquí están los comandos:

Limpiando el PageCache:

sincronizar; eco 1 > /proc/sys/vm/drop_caches

Limpieza de inodo y dentrie:

sincronizar; eco 2 > /proc/sys/vm/drop_caches

Borrado de inodo y dentrie y PageCache:

sincronizar; echo 3 > /proc/sys/vm/drop_caches

Antes de ejecutar cualquiera de estos comandos, ejecute:

Esto es necesario porque cada uno de los comandos requiere derechos de superusuario para funcionar. Ahora veamos qué sucede cuando se ejecutan estos comandos.

La utilidad de sincronización hace que el sistema escriba en el disco todos los datos almacenados en caché pero aún no escritos. Esto es para liberar tanta memoria como sea posible. De forma predeterminada, los datos no se eliminan del caché después de escribirse en el disco, esto es necesario para que el programa pueda leerlos más rápido si es necesario.

Si no ejecutamos el comando de sincronización, también liberaremos algo de espacio, pero después de ejecutarlo, el resultado será mejor.

Símbolo de separación; le dice al shell que espere a que se complete el primero antes de ejecutar otro comando. El último comando echo 1 > /proc/sys/vm/drop_caches escribe el valor 1 en el archivo /proc/sys/vm/drop_caches. Esto le indica al kernel que borre el tipo de caché que hemos elegido.

TIPOS DE CACHE EN LINUX
Y ahora veamos los tipos de caché que le permiten borrar estos comandos y también cómo funciona todo.

PageCache o el caché de la página es donde el kernel almacena todos los datos que ha escrito o leído del disco. Esto acelera mucho el sistema, ya que si el programa necesita los mismos datos por segunda vez, simplemente se tomarán de la RAM. Pero por esta razón, este caché ocupa la mayor parte del espacio.

Puede ver el tamaño del caché de la página usando la utilidad gratuita. Aquí se muestra en la última columna - en caché:

Dicho caché es el más eficiente y seguro de limpiar.

caché de inodo y dentrie también se aplica al sistema de archivos. Solo que no son los datos en sí los que se escriben en él, sino la estructura del sistema de archivos, la ubicación de los archivos y carpetas. Al solicitar la ubicación de un archivo o el contenido de una carpeta, el núcleo forma estructuras especiales que contienen toda esta información. En la próxima solicitud, las estructuras ya estarán almacenadas en la memoria. Cada sistema de archivos tiene su propio caché de inodos y un caché de dentrie compartido.

Este caché ocupa muy poca memoria. Los datos se presentan en bytes y, como puede ver, son muy pequeños. Puedes verlo con el comando:

Gato /proc/slabinfo | egrep dentry\|inodo


No se recomienda borrarlo para liberar memoria de Linux, ya que consume poca memoria y lleva relativamente mucho tiempo volver a escanear el sistema de archivos.

¿NECESITAS BORRAR EL CACHE?
Primero, si se usa mucha memoria, es posible que desee borrar el caché de la página, especialmente si es el que está ocupando la memoria. En segundo lugar, es posible que deba borrar la memoria caché de Linux si ha cambiado algún sistema de archivos o configuración del kernel, y ahora desea verificar cómo esto afectó la velocidad de las operaciones de lectura/escritura. En este caso, puede borrar todos los cachés y hacerlo sin reiniciar, lo cual es muy conveniente.

El sistema operativo Linux está diseñado de tal manera que antes de acceder al disco, se buscará el caché del disco, y si los datos necesarios están allí, no se accederá al disco. Si borra la memoria caché de Linux, el sistema operativo se ejecutará un poco más lento, ya que tendrá que buscar datos en el disco.

BORRAR CACHE AUTOMÁTICO
Veamos cómo borrar automáticamente la memoria caché todos los días a las dos de la mañana usando el programador de trabajos cron.

Primero, creemos un script bash con el siguiente contenido:

sudo vi /usr/local/bin/clearcache.sh

sincronizar; eco 1 > /proc/sys/vm/drop_caches

Solo borraremos la caché de la página, ya que es la que más ocupa. No tocaremos otros tipos, para no bajar en vano el rendimiento del sistema.

sudo chmod 755 /usr/local/bin/clearcache.sh

Queda por agregar la tarea al programador cron. Para hacer esto, ejecute el comando:

sudo crontab -e

Y en el editor que se abre, agregue la línea:

0 2 * * * /usr/local/bin/clearcache.sh

Este script ahora se ejecutará todas las noches y limpiará la memoria para que el servidor pueda funcionar normalmente.

CONFIGURACIÓN DEL TAMAÑO DE LA CACHE
Es mucho más conveniente no borrar el caché cada vez, sino establecer un límite, cuando se excede, el propio sistema eliminará las páginas adicionales. No puede limitar explícitamente cuántos megabytes puede usar el sistema para la memoria caché. Toda la memoria disponible se utilizará según sea necesario, pero puede ajustar la velocidad a la que se eliminan de la memoria caché las páginas caducadas.

El archivo /proc/sys/vm/vfs_cache_pression es el responsable de esto. Contiene un indicador relativo de cuán agresivamente eliminar páginas del caché. La configuración predeterminada es 100. Si la reduce, el kernel eliminará páginas con menos frecuencia y esto conducirá a un aumento muy rápido en el caché. En cero, las páginas no se eliminarán en absoluto. Si el valor es superior a 100, el tamaño de la memoria caché crecerá más lentamente y las páginas no utilizadas se eliminarán inmediatamente.

Por ejemplo, hagamos el tamaño mínimo de caché:

echo 1000 > /proc/sys/vm/vfs_cache_presión

No olvide que esto reducirá en gran medida el rendimiento de su sistema, porque en lugar del caché, los datos se leerán del disco.

CÓMO BORRAR LA MEMORIA DE PÁGINAS
El espacio de intercambio es muy fácil de limpiar. Para hacer esto, ejecute:

Intercambio -a && intercambio -a

Tenga en cuenta que cuando se borra el intercambio, todos los datos se transferirán nuevamente a la RAM.

CONCLUSIONES
Eso es todo. Ya sabes cómo borrar el caché de Linux y liberar memoria, todos los comandos deben ejecutarse como superusuario, de lo contrario, nada funcionará.

En Linux, casi todos los comandos sin interfaz gráfica de usuario. Cuando se ejecuta en servidores de acceso, solo shell. Entonces, hoy mostraremos los comandos que se pueden usar para verificar el uso de la memoria en sistema linux. La memoria incluye RAM y swap.

A menudo es importante verificar el uso de la memoria compartida y la memoria utilizada por el proceso en los servidores, así como los recursos no utilizados. Si está ejecutando un servidor web, entonces el servidor debe tener suficiente memoria para atender a los visitantes del sitio. Si este no es el caso, entonces el sitio se volverá muy lento o incluso no estará disponible cuando haya un aumento en el tráfico, simplemente porque no hay suficiente memoria. Lo mismo que ocurre en un ordenador de sobremesa.

1. comando libre

El comando gratuito es el comando más simple y fácil de usar para verificar el uso de la memoria en Linux. Aquí hay un breve ejemplo

$ free -m total de búferes compartidos libres utilizados almacenados en caché Mem: 7976 6459 1517 0 865 2248 -/+ búferes/caché: 3344 4631 Intercambio: 1951 0 1951

Opción -metro muestra todos los datos en megabytes. La cantidad total total de RAM es de 7976 MB instalados en el sistema, es decir, 8 GB. Columna usado muestra la cantidad de RAM que se puede utilizar en Linux, en nuestro caso serán unos 6,4 GB. El problema aquí son los altavoces. en caché Y tampones. La segunda línea dice que 4,6 GB son gratis. Esta es la memoria libre en la primera línea con la adición de búferes y memoria caché.

Linux tiene la costumbre de almacenar en caché para el rendimiento, de modo que la memoria se pueda liberar y usar cuando sea necesario.
La última línea está intercambiando memoria ( intercambio), que en este caso es completamente gratuito.

2. /proc/meminfo

La siguiente forma de verificar el uso de la memoria es leer el archivo /proc/meminfo. Saber que sistema de archivos/proc no contiene archivos reales. Son archivos virtuales que contienen información dinámica del kernel y del sistema.

$ cat /proc/meminfo MemTotal: 8167848 kB MemFree: 1409696 kB Búferes: 961452 kB Caché: 2347236 kB SwapCached: 0 kB Activo: 3124752 kB Inactivo: 2781308 kB Activo (anón): 2603376 kB Inactivo (anón): 309 056 kB activo (archivo): 521376 kB Inactivo (archivo): 2472252 kB No desalojar: 5864 kB Mlocked: 5880 kB SwapTotal: 1998844 kB SwapFree: 1998844 kB Dirty: 7180 kB Writeback: 0 kB AnonPages: 2603272 kB Mapeado: 788380 k B Shmem: 311596 kB Slab: 200468 kB SReclaimable: 151760 kB SUnreclaim: 48708 kB KernelStack: 6488 kB PageTables: 78592 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6082768 kB Committed_AS: 9397536 kB VmallocTo tal: 34359738367 kB VmallocUsado: 420204 kB VmallocChunk : 34359311104 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 62464 kB DirectMap2M: 8316928 kB

El kernel de Linux está diseñado de tal manera que la memoria en un determinado Sistema operativo utilizado con la expectativa de un rendimiento máximo de todo el sistema. Y aquí vale la pena comparar dos memorias: lenta y rápida: RAM y memoria disco duro(unidad SSD). La velocidad de lectura/escritura en RAM es mucho mayor que la velocidad de acceso al disco duro. Esto significa que se sugiere una conclusión bastante elemental: es mejor leer desde la RAM que el mismo archivo desde el disco duro. Sin embargo, dada la cantidad limitada de RAM, no puede almacenar todo en la RAM, ya que el propósito principal de la RAM es trabajar con aplicaciones.

Cómo utiliza Linux (CentOS) la memoria RAM

Volvamos al diseño de Linux (CentOS), que almacena en caché todos los archivos que se han solicitado desde que se inició la computadora en la RAM. Esto se llama caché de archivos de CentOS y es el principal culpable de todos los gritos y juramentos sobre el hecho de que Linux se comió toda su RAM. Por supuesto, con el desbordamiento de la memoria RAM, los archivos poco utilizados se desecharán y se sobrescribirán con archivos nuevos, además de vaciar la caché de archivos al tamaño que las aplicaciones soliciten. Para un análisis completo de la situación, aquí está el resultado superior de mi servidor:

Nos interesarán las dos últimas líneas. Línea Memoria: muestra el uso de RAM. Primer valor con título total indica que se está utilizando un sistema con 2 GB de RAM. Luego viene el valor de más de 500 MB con una posdata usado, que indica cuánta memoria está ocupada en este momento. Después de eso viene el valor con la posdata. gratis, que indica memoria libre. Posdata adicional tampones- algo está conectado con los búferes xs de qué (hasta ahora no tiene una carga seria en este artículo). Y lo más interesante es el último párrafo de la última línea con una posdata en caché- muestra cuánta memoria se usó para el caché de archivos, que se discutió un poco más arriba.

Según la pantalla anterior, resulta que la memoria RAM está repleta de 530 MB y que solo 1,4 GB de memoria están disponibles para su uso posterior (también se muestra la pantalla de trabajo después de unos minutos después de encender la computadora).

Sin embargo, 1,65 GB de memoria en realidad no son gratuitos, lo que resulta si suma la memoria libre (gratuita) y la memoria caché (caché) juntas. Esto es así debido al hecho de que el caché de archivos de CentOS asignará los espacios ocupados de RAM si alguna aplicación o el propio sistema lo necesita. Por lo tanto, se pueden asignar otros 250 MB para aplicaciones y SO (por el momento), que actualmente se utilizan para el caché de archivos.

Por lo tanto, cuando vea valores terriblemente pequeños en el campo libre, no olvide agregar el valor del campo en caché a esto. Entonces obtendrás cantidad total de RAM libre. En base a todo esto, generalmente puedes rechazar cualquier cambio en el funcionamiento de Linux (CentOS), ya que las acciones del sistema operativo no son demasiado agresivas y la memoria RAM necesaria para tus aplicaciones siempre estará disponible.

Problemas con caché de archivos demasiado grande

Sin embargo, desde mi propia experiencia, diré que cuando más del 90-95% de toda la RAM se asigna para el caché de archivos, junto con las aplicaciones, el funcionamiento posterior de todo el sistema se ralentiza un poco. Dado que era el servidor web que estaba configurando, el mejor indicador aquí es la velocidad de los sitios, que comienza a cojear cuando la RAM está casi completamente llena. Además, se notó que cuando la memoria RAM está llena, el trabajo aumenta. UPC, que decide constantemente qué descartar de la memoria RAM y qué agregar allí. Por lo tanto, se tomó la decisión limitar el tamaño máximo de caché de archivos de CentOS.

Borrar la caché de archivos de CentOS

En esta dirección, muchas personas sugieren borrar manualmente el caché de archivos y, para automatizar este proceso, escribir un trabajo cron para que se ejecute una vez al día o cada pocas horas. Para una imagen más completa, daré este comando:

sh -c ‘echo 1 > /proc/sys/vm/drop_caches"

El comando realmente hace su trabajo y el caché de archivos se borra por completo. Pero inmediatamente comienza a reponerse nuevamente y pronto volverá a llenar todo el espacio libre en el disco. Pero hay otra solución.

Límite de tamaño de caché de archivos

Para hacer esto, necesitamos cambiar el valor en el archivo /proc/sys/vm/min_free_kbytes al valor que no desea que se asigne para el caché de archivos. En otras palabras, el tamaño de RAM que especifique en KB siempre permanecerá vacío, no ocupado por el caché de archivos. Para ser honesto, no encontré un material más específico que dijera exactamente cómo funciona este parámetro:

  1. ¿Deja la cantidad especificada para las aplicaciones y el sistema en función de la cantidad total de RAM? o
  2. ¿Deja la cantidad especificada para las aplicaciones y el sistema basado en RAM libre?

Yo mismo tiendo a la segunda opción, ya que el caché de archivos predeterminado tiene una prioridad más baja que las aplicaciones y, por lo tanto, devuelve los territorios ocupados a pedido.

Pero volvamos al archivo, que configuré en 700000, que tiene 700 MB. Inmediatamente después del cambio, ya notará los cambios, ya que el caché de archivos se restablecerá lo suficiente como para cumplir con los nuevos requisitos. Sin embargo, este estado solo durará hasta el próximo reinicio y, por lo tanto, debemos consolidar nuestras acciones. Para ello, en un archivo /etc/sysctl.conf añadir una línea

vm.min_free_kbytes=700000

Por supuesto, aquí debe especificar su valor. Puedes recargar y revisar el archivo. /proc/sys/vm/min_free_kbytes cuyo valor no debe cambiarse al valor predeterminado.

Así es como puede limitar el tamaño máximo que se puede asignar en RAM para las necesidades del caché de archivos.

Si nota un error, seleccione un fragmento de texto y presione Ctrl + Enter
COMPARTIR: