La ejecución top
en modo por lotes para informar periódicamente los tamaños de memoria se puede usar para ver quién está usando la memoria cuando las cosas van mal. La ejecución sar
en modo por lotes debería proporcionar algunos buenos diagnósticos sobre el uso de la memoria y las E / S relacionadas. Ejecutar munin
para monitorear el sistema debería darle un gráfico con buenos detalles sobre para qué memoria se está utilizando. Esto puede ayudar mucho.
Puede usar limits.conf para limitar el tamaño máximo de núcleo de los programas. Establecido correctamente, esto debería matar a cualquier programa que esté perdiendo memoria. Esto funciona con el módulo pam_limits. Los límites también se pueden establecer con el ulimits
comando.
Está ejecutando algunos programas que podrían utilizar grandes cantidades de memoria. Algunas cosas que podrías mirar incluyen.
- Las aplicaciones mal programadas que se ejecutan bajo
apache2
pueden perder memoria. Debería ver que el tamaño de la memoria aumenta cuando esto sucede. Puede ajustar apache2 para reciclar a los niños después de un cierto número de usos estableciéndolo MaxRequestsPerChild
en aproximadamente 100. Si esto resuelve el problema, entonces debe resolver la fuga. Vería esto primero.
- MySQL puede intentar cargar datos en la memoria. Si tiene una gran cantidad de datos en la memoria, esto puede causar cierta agitación, pero no debería ser tan dramático como está viendo.
- Si tiene un
tmpfs
sistema de archivos grande montado, puede perder memoria si los archivos no se eliminan cuando se usan. Los archivos grandes de larga duración también pueden ser un problema.
- Si el problema se produce aproximadamente a la misma hora del día, es posible que tenga un programa programado que está perdiendo memoria.
- Si tiene un programa que asigna memoria compartida, pero no la libera antes de salir, tendrá una pérdida de memoria relativamente invisible. Si la memoria compartida está bloqueada en la memoria, puede forzar el intercambio. La cantidad de memoria compartida disponible suele ser relativamente limitada.
- El paquete liquidsoap + icecast podría tener problemas de almacenamiento en búfer que usan memoria. No he usado esta combinación, así que no estoy seguro de cómo aparecería.
Uso normal de la memoria: la memoria libre no es algo que desee mucho. Si su sistema ha estado funcionando durante mucho tiempo y tiene mucha memoria libre, algo está mal. Cada vez que lea o escriba un archivo, los bloques irán al caché del búfer. Esto reducirá su memoria libre, y es algo bueno. El sistema mantendrá suficiente espacio libre para iniciar algunos programas sin buscar memoria en otro lugar. Como muchos programas se ejecutan rápidamente, su memoria volverá al grupo libre cuando dejen de ejecutarse.
Cuando lee un archivo que está en la memoria caché del búfer, no se requiere acceso al disco y la lectura se resuelve desde la memoria caché del búfer. Las escrituras usan un mecanismo similar. Si su sistema necesita memoria, la memoria caché del búfer es uno de los primeros lugares que se utiliza. La mayoría de los buffers se pueden liberar de inmediato.
Si tiene una pérdida de memoria, verá que la memoria libre y las memorias intermedias comienzan a reducirse. Esto todavía no es un problema grave, ya que la memoria perdida eventualmente debería trasladarse al espacio de intercambio. Su sistema seguirá funcionando bien hasta que complete el espacio de intercambio, y extraiga el espacio libre restante para que los programas de punto no puedan iniciarse. Es típico que se pueda usar una pequeña cantidad de espacio de intercambio.