Aquí se explica que el OOM-Killer se puede configurar a través de overcommit_memory
y que:
- 2 = sin exceso de compromiso. Las asignaciones fallan si se pide demasiado.
- 0, 1 = sobrecompromiso (heurísticamente o siempre). Elimine algunos procesos basados en algunas heurísticas cuando realmente se accede a demasiada memoria.
Ahora, puedo entender completamente mal eso, pero ¿por qué no hay una opción (o por qué no es la predeterminada) para eliminar el proceso que realmente intenta acceder a demasiada memoria que asignó?
linux
out-of-memory
Martin Ba
fuente
fuente
no overcommit
esencialmente hace la opción. Si un proceso solicita demasiada memoria, falla. Si verifica el error, generalmente se suicidará; si no lo hace, probablemente obtendrá un Error de segmentación cuando intente desreferenciar el puntero nulo quemalloc()
regresa, y se bloqueará.no overcommit
modo, de acuerdo con las fuentes citadas (como kernel.org/doc/Documentation/vm/overcommit-accounting ). Creo que editaré tu pregunta en consecuencia.Respuestas:
Considere este escenario:
Si el proceso que fue asesinado fue el último en solicitar memoria, su administrador de tareas sería asesinado.
O:
Ahora su servidor X es asesinado. No causó el problema; simplemente estaba "en el lugar equivocado en el momento equivocado". Resultó ser el primer proceso en asignar más memoria cuando no quedaba nada, pero no fue el proceso que utilizó toda la memoria para comenzar.
fuente