2009-03-01 18 views
27

Quiero forzar al kernel de Linux a asignar más memoria a las aplicaciones después de que el caché comience a ocupar demasiada memoria (como se puede ver en la salida de 'free').Cómo limpiar los cachés utilizados por el kernel de Linux

me he encontrado

sudo sync; sudo sysctl -w vm.drop_caches=3; free 

(para liberar tanto dentry disco cache/i-nodo y la caché de páginas) y veo que sólo la mitad de la memoria caché utilizada fue liberado - el resto se mantiene. ¿Cómo puedo saber qué ocupa el resto del caché y obligarlo a ser liberado?

+0

El chache que queda es solo un caché que se descarta inmediatamente a medida que se necesita memoria nueva. No es beneficioso forzar la eliminación de estas regiones de caché. Las aplicaciones siempre serán primeros ciudadanos para la memoria y no tienen que luchar con la memoria caché. – ypnos

+1

Tengo un problema con mi servidor, y creo que algo está abusando de la memoria caché hasta el punto en que las aplicaciones se relegan a páginas intercambiadas y se agitan debido a la falta de memoria. Puede ser un problema del núcleo que podría no serlo. Purgar la caché puede ser una buena forma de probarla. – Guss

+0

su 'sysctrl' debe ser 'sysctl' – raittes

Respuesta

17

Tendrá que aumentar vfs_cache_pressure y establecer swappiness en 0. Hacer eso hará que el kernel recupere la caché más rápido, mientras le da a los procesos igual o mayor favor al decidir wh en sale paginado. Usted solo desea hacer esto si los procesos que le interesan hacen muy poca E/S de disco. Si un proceso de enlace de E/S de red tiene que intercambiarse para atender solicitudes, ese es un problema y la verdadera solución es colocarlo en un servidor menos competitivo.

Con la configuración de swappiness predeterminada, el kernel casi siempre va a favorecer el mantenimiento de la memoria caché relacionada con FS en la memoria real. Por lo tanto, si aumenta la presión de la caché, asegúrese de ajustar también la suavidad.

+0

Gracias por la respuesta. Aunque no es lo que esperaba, lo aceptaré, ya que incluye información que no conozco y brinda algunas pautas para lograr un objetivo. Todavía me gustaría saber mejor cómo saber para qué se utiliza la memoria caché, especialmente cuando no está siendo limpiada por drop_caches. – Guss

16

Los contenidos de /proc/meminfo le dicen para qué utiliza el kernel RAM.

Puede utilizar /proc/sys/vm/vfs_cache_pressure para forzar el núcleo de recuperar la memoria que se utiliza para las memorias caché del sistema de archivos relacionados con pereza, más o impaciencia.

Tenga en cuenta que su aplicación solo se beneficiará al ajustar este parámetro si realiza poca o ninguna E/S de disco.

+1

Mi aplicación hace muy poco IO: la mayoría de los datos provienen de un DB remoto. Estoy un poco confuso en el/proc/meminfo: Veo Cached: 1.9GB, SwapCached: 8MB. IIRC, eso significa que Cached está compuesto de 8MB de caché de intercambio, 1.892GB de otras cosas (caché de disco, y ¿qué más?). ¿Dónde se cuentan los archivos mapeados en la memoria? – Guss

+0

Los archivos mapeados en la memoria (si la aplicación es buena) deben tener sus propios avisos y presión, preferentemente mediante la aplicación que llame a posix_madvise(). También es posible que desee leer en su configuración 'swappiness'. –

+0

De hecho, una buena respuesta, simplemente no es una respuesta a mi pregunta :-). ¿Entiendo correctamente que los archivos mapeados en memoria se cuentan contra la huella de memoria RES de su aplicación? – Guss

15

Usted puede encontrar John Nilsson's answer to my Question útil para purgar la caché con el fin de probar si lo que está relacionado a su problema:

sync && echo 1 > /proc/sys/vm/drop_caches

Aunque supongo que la única diferencia real es 1 vs 3

+0

1 solo borra la memoria caché del disco, fue relevante para su pregunta. También quiero borrar el caché de la página, ya que creo que una de mis aplicaciones tiene pérdida de memoria y problemas. – Guss

+2

1 borra la memoria caché de la página, 2 borra dentries e inodos, 3 borra la memoria caché de la página, dentries e inodes – Schildmeijer

Cuestiones relacionadas