29 votos

Evitar linux fuera de la aplicación de la memoria de desmontaje

Me estoy encontrando que en ocasión de mi caja de Linux se ejecuta fuera de la memoria y empieza a derrumbar los procesos aleatorios para tratar con él.

Tengo curiosidad por lo que los administradores de hacer para evitar esto? Es la única solución real a la cantidad de memoria (a la que se sumó el swap solo ayuda?), o es que hay mejores maneras de configurar el cuadro de software para evitar esto? (es decir, las cuotas, o alguna de esas?).

40voto

voretaq7 Puntos 63415

Por defecto de Linux tiene un poco de cerebro dañada por el concepto de gestión de memoria: le permite asignar más memoria que el sistema tiene, al azar, a continuación, dispara un proceso en la cabeza cuando se mete en problemas. (El real de la semántica de lo que se mató más complejo que el de Google "Linux OOM Killer" para un montón de detalles y argumentos acerca de si es una buena o mala cosa).


Para restaurar una apariencia de cordura a su gestión de memoria:

  1. Deshabilitar el OOM Killer (Put vm.oom-kill = 0 en /etc/sysctl.conf)
  2. Deshabilitar la memoria de sobreasignación (Put vm.overcommit_memory = 2 en /etc/sysctl.conf)
    Tenga en cuenta que este es un trinarias valor: 0 = "estimado si tenemos suficiente RAM", 1 = "Siempre digo que sí", 2 = "decir no, si no tenemos la memoria")

Estos ajustes se hacen de Linux se comportan en la forma tradicional (si un proceso solicita más memoria de la disponible malloc() producirá un error y el proceso que solicita la memoria se espera que lidiar con que el fracaso).

4voto

Joseph Puntos 141

Puede deshabilitar de sobreasignación, ver http://www.mjmwired.net/kernel/Documentation/sysctl/vm.txt#514

3voto

mctylr Puntos 757

La respuesta corta, para un servidor, es comprar e instalar más memoria RAM.

Un servidor que habitualmente suficiente experiencia OOM (De Memoria) de los errores, además de la máquina virtual (memoria virtual) del administrador de sobreasignación sysctl opción en el kernel de Linux, esto no es una buena cosa.

Que se aumente la cantidad de swap (memoria virtual que se ha paginado en el disco por el núcleo del administrador de memoria) ayuda si los valores actuales son bajos, y el uso, implica muchas de las tareas que cada uno de esos grandes cantidades de memoria, en lugar de un uno o un par de procesos a cada solicitante una enorme cantidad de memoria virtual total disponible (RAM + swap).

Para muchas aplicaciones, la asignación de más de dos veces (2x) la cantidad de RAM como swap proporciona la disminución de regreso en la mejora. En algunos de los grandes simulaciones computacionales, esto puede ser aceptable si la velocidad de desaceleración es soportable.

Con la memoria RAM (ECC o no) ser bastante asequibles, por modestas cantidades, por ejemplo 4-16 GB, tengo que admitir que no he experimentado este problema a mí mismo en un largo tiempo.

Los fundamentos de mirar en el consumo de memoria incluyendo el uso de free y top, ordenados por el uso de la memoria, como las dos más comunes rápida de las evaluaciones de la memoria de los patrones de uso. Así que asegúrese de que usted entiende el significado de cada campo en la salida de los comandos en el muy menos.

Con no hay detalles específicos de las aplicaciones (por ejemplo, base de datos, servicios de red del servidor en tiempo real de procesamiento de vídeo) y el servidor de uso (algunos de los usuarios de energía, 100-1000 de usuario/conexiones de cliente), no puedo pensar en ningún recomendaciones generales en lo que respecta a tratar con el OOM problema.

3voto

Magellan Puntos 3691

El aumento de la cantidad de memoria física puede no ser una respuesta eficaz en todas las circunstancias.

Una forma de verificar esto es el 'encima' de comandos. En particular, estas dos líneas.

Esto está fuera del servidor cuando era saludable:

MEM | tot   23.7G | free   10.0G | cache   3.9G | buff  185.4M | slab  207.8M |
SWP | tot    5.7G | free    5.7G |              | vmcom  28.1G | vmlim  27.0G |

Cuando se ejecuta mal (y antes de ajustar overcommit_memory de los 50 a los 90, nos gustaría ver el comportamiento con vmcom funcionando bien más de 50G, oom killer voladura de los procesos de cada pocos segundos, y la carga se mantiene radicalmente de rebote debido a NFSd hijo procesos de soplado y re-crean continuamente.

Recientemente hemos duplicado los casos donde multi-usuario de Linux de los servidores de terminal server de forma masiva durante confirmación de la asignación de memoria virtual, pero muy pocas de las paginas solicitadas son realmente consumidos.

Aunque no es aconsejable seguir esta ruta exacta, ajustamos de sobreasignación de memoria desde el valor predeterminado de 50 a 90 que alivia algunos de los problema. Nos acaban de tener que mover todos los usuarios a otro servidor de terminal server y reiniciar para que se vea el beneficio total.

2voto

pehrs Puntos 6831

Usted puede utilizar ulimit para reducir la cantidad de memoria que un proceso se le permite reclamar antes de que sea asesinado. Es muy útil si tu problema es uno o un par de huir de los procesos que se bloquea el servidor.

Si su problema es que usted simplemente no tiene suficiente memoria para ejecutar los servicios que usted necesita sólo hay tres soluciones:

  1. Reducir la memoria utilizada por su servicios mediante la limitación de las cachés y similar

  2. Crear una mayor área de swap. Se costo en el rendimiento, pero puede comprar un poco de tiempo.

  3. Comprar más memoria

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: