Il est expliqué ici que OOM-Killer peut être configuré via overcommit_memory
et que:
- 2 = pas de surengagement. Les allocations échouent si vous en demandez trop.
- 0, 1 = surcharge (heuristiquement ou toujours). Tuez certains processus basés sur des heuristiques lorsque trop de mémoire est réellement accédée.
Maintenant, je peux complètement mal comprendre cela, mais pourquoi n'y a-t-il pas une option (ou pourquoi n'est-ce pas la valeur par défaut) pour tuer le processus même qui essaie réellement d'accéder à trop de mémoire allouée?
linux
out-of-memory
Martin Ba
la source
la source
no overcommit
essentiellement ce que fait l' option. Si un processus demande trop de mémoire, il échoue. S'il vérifie l'erreur, il se tuera généralement; si ce n'est pas le cas, il obtiendra probablement une erreur de segmentation lorsqu'il essaiera de déréférencer le pointeur nul quimalloc()
revient, et il se bloquera.no overcommit
mode, selon les sources citées (telles que kernel.org/doc/Documentation/vm/overcommit-accounting ). Je pense que je vais modifier votre question en conséquence.Réponses:
Considérez ce scénario:
Si le processus qui a été tué était le dernier processus à demander de la mémoire, votre gestionnaire de tâches serait tué.
Ou:
Maintenant, votre serveur X est tué. Cela n'a pas causé le problème; c'était juste "au mauvais endroit au mauvais moment". Il s'est avéré que c'était le premier processus à allouer plus de mémoire quand il n'en restait plus, mais ce n'était pas le processus qui utilisait toute la mémoire pour commencer.
la source