Tengo un servidor que ejecuta el paquete liquidsoap + icecast y un sitio web simple (httpd + mysqld). Nada especial. Visitantes alrededor de 2000+ por día, con alrededor de 50 en línea simultáneamente en promedio.
El servidor tiene 8 GB de RAM. A medida que pasa el tiempo, la cantidad de memoria libre disminuye constantemente, aunque no se inicia nada nuevo en el servidor y no hay nuevos usuarios. En algún momento comienza a intercambiarse, la carga en el servidor aumenta y deja de responder. Por lo general, lo que hago es simplemente reiniciar el servidor ...
¿Qué se puede hacer para detectar qué es exactamente la pérdida de memoria? Uso top para monitorear el uso de recursos, pero por lo que veo no muestra nada útil:
¿Hay alguna forma de averiguar qué usa tanta memoria? o lo que comienza a intercambiar en el disco en gran medida? ¿Alguna forma de liberar memoria sin reiniciar el servidor?
fuente
Respuestas:
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ónsar
en modo por lotes debería proporcionar algunos buenos diagnósticos sobre el uso de la memoria y las E / S relacionadas. Ejecutarmunin
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.
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éndoloMaxRequestsPerChild
en aproximadamente 100. Si esto resuelve el problema, entonces debe resolver la fuga. Vería esto primero.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.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.
fuente
sar
ayudará a determinar qué partición tiene la E / S y puede ayudar a descubrir el problema.Puede usar este comando para ver las 10 aplicaciones principales con respecto al uso de RAM:
A veces, este comando te ayuda si se han generado muchos subprocesos:
De esta manera puede ver qué procesos pertenecen juntos.
fuente
ps
otop
salida es lo correcto para mirar si se trata de detectar una pérdida de memoria: ¿no es este solo el porcentaje de la memoria física que el proceso está usando actualmente? Pero otras partes de la memoria utilizada (incluida la pérdida) del proceso pueden intercambiarse. ¿Quizás "tamaño" o "vsize" sería más apropiado para medir el tamaño de un proceso? Por ejemplo,ps -A --sort -size -o comm,size | head -n 11
ops -A --sort -vsize -o comm,vsize | head -n 11
Nada está realmente usando esa memoria en términos de aplicaciones.
Debe deducir el valor 'en caché' que representa el caché de la página para tener una mejor idea de cuál es su uso real de memoria en términos de uso del programa.
Básicamente, esta es una buena administración de memoria y esto es idealmente lo que desea.
Vea el enlace aquí para más información: http://www.linuxatemyram.com/
fuente
Realmente no soy un profesional en esto, pero el jabón líquido + icecast está relacionado con multimedia. Cuando el sistema es gratuito, almacena en caché y / u ocupa memoria para su uso futuro. Y si el tráfico aumenta en un momento determinado del día / durante un período de tiempo, comenzará a intercambiarse. En este punto, si aumentan las solicitudes (usuarios que ven contenido), los recursos necesarios serán más de 8 GB de RAM.
fuente