36 votos

Apague el Linux OOM killer por defecto?

El OOM killer en Linux causa estragos con varias aplicaciones cada tan a menudo, y parece que no hay mucho que se hace realmente en el desarrollo del kernel de lado para mejorar esto. No sería mejor, como una mejor práctica al configurar un nuevo servidor, para revertir el defecto en la sobreasignación de memoria, que es, apáguela (vm.overcommit_memory=2) a menos que usted sabe que usted desea para su uso particular? Y ¿qué sería de los casos de uso se donde usted sabe que usted quiere que la sobreasignación?

Como un bono, ya que el comportamiento en caso de vm.overcommit_memory=2 depende de vm.overcommit_ratio de espacio de intercambio, lo que sería una buena regla del pulgar para el dimensionamiento de los dos últimos, por lo que esta configuración se mantiene funcionando razonablemente?

63voto

noocyte Puntos 150

Una interesante analogía (de http://lwn.net/Articles/104179/):

Un avión de la compañía descubrió que era más barata para volar en sus aviones con menos de combustible a bordo. Los planos que ser más ligeros y consumen menos combustible y dinero se guardó. En raras ocasiones, sin embargo la cantidad de combustible que era insuficiente, y el avión se estrellaría. Este el problema fue resuelto por los ingenieros de la compañía por el desarrollo de un especial fuera de la oficina (fuera-de-combustible) mecanismo. En los casos de emergencia a un pasajero fue seleccionado y expulsado del avión. (Cuando sea necesario, el procedimiento fue repetida.) Un gran cuerpo de teoría países desarrollados y en muchas de las publicaciones dedicado al problema de la correctamente la selección de la víctima a ser expulsado. Debe la víctima elegida al azar? O se debe elegir el más pesado persona? O el más antiguo? Debe los pasajeros pagan a fin de no ser expulsado, por lo que la víctima sería los más pobres en la junta? Y si por ejemplo, el más pesado de persona que era elegido, debe haber un especial excepción en el caso de que fue el piloto? Debe pasajeros de primera clase se exentos? Ahora que el DESCANSO mecanismo de existía, sería activado cada ahora y entonces, y expulsar a los pasajeros incluso cuando no había escasez de combustible. Los ingenieros están estudiando todavía precisamente cómo este mal funcionamiento es causado.

31voto

Ryan Sampson Puntos 2898

El OOM killer sólo causa estragos si usted tiene sobrecargado el sistema. Darle suficiente de intercambio, y no ejecutar aplicaciones que de repente decide comer grandes cantidades de RAM, y usted no tendrá un problema.

Específicamente para responder a sus preguntas:

  • Yo no creo que sea una buena idea desactivar de sobreasignación en el caso general; muy pocas las aplicaciones están escritas para afrontar brk(2) (y los contenedores que utilice, como por ejemplo malloc(3)) devuelve un error. Cuando he experimentado esto en mi trabajo anterior, se consideran más de una molestia para obtener lo que es capaz de manejar fuera de los errores de memoria de lo que fue para lidiar con las consecuencias de una OOM (que, en nuestro caso, era mucho peor que tener que reiniciar los servicios ocasionales si un OOM ocurrido -- hemos tenido que reiniciar un clúster entero, porque GFS es un humeante montón de heces).
  • Desea sobreasignación para cualquier proceso que overcommits de memoria. Los dos culpables más comunes aquí son Apache y la JVM, pero un montón de aplicaciones de ello, para algunos, en mayor o menor grado. Se piensa que podría necesitar una gran cantidad de memoria en algún momento en el futuro, por lo que agarrar un gran pedazo de la derecha. En una de sobreasignación habilitado el sistema, el kernel va "meh, lo que sea, venga me molesta cuando en realidad se desea escribir esas páginas" y no ocurre nada malo. En una de sobreasignación sistema, el kernel dice "no, usted no puede tener esa cantidad de memoria, si usted sucede a escribir para que todos en algún momento en el futuro estoy huesos, así que no hay memoria de ti!", y la asignación de falla. Pues nada ahí va "oh, OK, ¿puedo tener esta cantidad más pequeña de datos de proceso en el segmento?", a continuación, el proceso de (a) se cierra con un error de memoria, o (b) no comprueba el código de retorno de malloc, piensa que está bien para ir, y escribe en una ubicación de memoria no válida, causando una violación de segmento. Afortunadamente, la JVM no todo es prealloc en el inicio (de modo que la máquina virtual se inicie o se muere de inmediato, que se suele notar), pero Apache no es funky cosas con cada nuevo hijo, el cual puede tener efectos emocionantes en la producción (unreproducible "no manipulación de las conexiones de" tipos de la emoción).
  • Yo no quiero poner a mi overcommit_ratio cualquier mayor que el valor predeterminado de 50%. De nuevo, desde mi prueba, aunque la configuración alrededor de 80 o 90 podría sonar como una idea genial, el núcleo requiere de grandes trozos de la memoria en momentos inoportunos, y totalmente cargado el sistema con una alta relación de sobreasignación es probable que la insuficiencia de repuesto de memoria cuando el núcleo de las necesidades (que conduce al miedo, la pestilencia, y oopses). Así que jugar con sobreasignación introduce una nueva, aún más divertido modo de falla-en vez de sólo reiniciar cualquier proceso consiguió OOMed cuando se agota la memoria, ahora la máquina se cuelga, que conduce a una interrupción de todo en la máquina. IMPRESIONANTE!
  • El espacio de intercambio en una de sobreasignación sistema libre depende de la cantidad solicitada, pero de memoria no utilizada de sus aplicaciones necesitan, además de una sana margen de seguridad. Trabajando lo que se necesita en un caso específico se deja como ejercicio para el lector.

Básicamente, mi experiencia es que desactivando la opción de sobreasignación es un bonito experimento que rara vez funciona en la práctica tan bien como parece en la teoría. Esta muy bien se corresponde con mis experiencias con otros ajustadores en el núcleo -- los desarrolladores del núcleo Linux son casi siempre más inteligente que tú, y los valores predeterminados del trabajo de los mejores para la gran, gran mayoría de los casos. Los dejo solos, y en lugar de ir a buscar lo que el proceso tiene la fuga y solucionarlo.

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: