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ó?
¿Qué sucede si un proceso crítico del sistema requiere demasiada memoria?
—
Lawrence
En primer lugar, puede hacer esto. Pero, el mayor problema con esa pregunta es que, con toda probabilidad, si un proceso está pidiendo memoria, entonces se está ejecutando nuevamente , o, en otras palabras, este es un nuevo proceso involucrado en el procesamiento muy actual. ¿Preferiría que el OOM permitiera que su cliente im no abierto durante 3 días siga desperdiciando memoria del sistema o preferiría que YouTube realmente se cargara en algún momento este año? linuxatemyram.com
—
mikeserv
Esto es lo que
—
Barmar
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 que malloc()
regresa, y se bloqueará.
Tenga en cuenta que 2 es en realidad el
—
hans_meine
no overcommit
modo, de acuerdo con las fuentes citadas (como kernel.org/doc/Documentation/vm/overcommit-accounting ). Creo que editaré tu pregunta en consecuencia.