¿Se enfrenta a un problema de rendimiento y sospecha que podría estar relacionado con el uso de la memoria caché? El uso elevado de caché normalmente no debería causar problemas de rendimiento, pero podría ser la causa raíz en algunos casos excepcionales.
¿Qué es la caché de memoria?
Con el fin de acelerar las operaciones y reducir la E/S del disco, el kernel generalmente almacena en caché tanto como tiene memoria. Por diseño, las páginas que contienen datos en caché se pueden reutilizar bajo demanda para otros usos (por ejemplo, aplicaciones). El camino no es más lento que reclamar páginas vírgenes e intactas.
¿Cuál es el propósito de /proc/sys/vm/drop_caches
Escribir en /proc/sys/vm/drop_caches permite solicitar que el kernel suelte inmediatamente la mayor cantidad posible de datos almacenados en caché limpios. Por lo general, esto dará como resultado que parte de la memoria esté más disponible; sin embargo, en circunstancias normales, esto no debería ser necesario.
Cómo borrar la caché de memoria usando /proc/sys/vm/drop_caches
Escribiendo el valor apropiado en el archivo /proc/sys/vm/drop_caches hace que el núcleo elimine cachés, dentries e inodos limpios de la memoria, lo que hace que la memoria quede libre.
# sync; echo 1 > /proc/sys/vm/drop_caches
# sync; echo 2 > /proc/sys/vm/drop_caches
# sync; echo 3 > /proc/sys/vm/drop_caches
La ejecución de la sincronización escribe las páginas sucias en los discos. Normalmente, las páginas sucias son la memoria en uso, por lo que no están disponibles para liberar. Por lo tanto, ejecutar la sincronización puede ayudar a que las operaciones de eliminación subsiguientes liberen más memoria.
Caché de página es la memoria retenida después de leer los archivos. El kernel de Linux prefiere mantener la memoria caché de la página sin usar, suponiendo que los archivos que se leen una vez probablemente se volverán a leer en un futuro próximo, evitando así el impacto en el rendimiento de la E/S del disco.
dentry e inode_cache son memoria retenida después de leer atributos de directorio/archivo, como open() y stat(). dentry es común en todos los sistemas de archivos, pero inode_cache es por sistema de archivos. El kernel de Linux prefiere mantener esta información asumiendo que será necesaria nuevamente en un futuro cercano, evitando así la E/S del disco.
Nota :Comenzar con el comando de sincronización como se muestra en los 3 comandos anteriores es opcional. El comando de sincronización permite que el kernel escriba tantas páginas de caché sucias en el disco como pueda (para maximizar la cantidad de páginas de caché de datos que se pueden eliminar)Cómo borrar la caché de memoria usando sysctl
También puede desencadenar la eliminación de caché usando sysctl -w vm.drop_caches=[number] dominio.
sysctl -w vm.drop_caches=3
sysctl -w vm.drop_caches=2
sysctl -w vm.drop_caches=1Nota :¡Usar vm.drop_caches puede causar un interbloqueo si el sistema tiene mucha memoria y carga de E/S!
Los datos en caché "limpios" son elegibles para descartar. Los datos almacenados en caché "sucios" deben escribirse en alguna parte. El uso de vm.drop_caches nunca activará el kernel para soltar caché sucio.