Cette réponse explique les actions entreprises par le noyau lorsqu'une situation de MOO est rencontrée en fonction de la valeur de sysctl vm.overcommit_memory
.
Lorsque overcommit_memory
est défini sur 0 ou 1, overcommit
est activé et les programmes sont autorisés à allouer plus de mémoire que n'est réellement disponible.
Maintenant, qu'est-ce qui se passe quand nous manquons de mémoire dans cette situation? Comment le tueur OOM décide-t-il quel processus tuer en premier?
linux
memory
out-of-memory
Ramesh
la source
la source
Réponses:
Si la mémoire est complètement utilisée par les processus, dans la mesure où cela peut menacer la stabilité du système, alors le destructeur de MOO entre en jeu.
REMARQUE: Le tueur de MOO a la tâche de continuer à supprimer les processus jusqu'à ce que suffisamment de mémoire soit libérée pour permettre le bon fonctionnement du reste du processus que le noyau tente d'exécuter.
Le tueur OOM doit sélectionner le (s) meilleur (s) processus à tuer. Mieux ici, fait référence à ce processus qui libérera le maximum de mémoire lors de la mise à mort et qui est également le moins important pour le système.
L'objectif principal est de supprimer le plus petit nombre de processus possible afin de minimiser les dommages causés tout en maximisant la quantité de mémoire libérée.
Pour faciliter ceci, le noyau maintient un
oom_score
pour chacun des processus. Vous pouvez voir leoom_score
de chacun des processus dans le/proc
système de fichiers sous lepid
répertoire.Plus la valeur d'
oom_score
un processus est élevée, plus grande est sa probabilité d'être tué par le tueur OOM dans une situation de mémoire insuffisante.Comment est
OOM_Score
calculé?Références
http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process https://serverfault.com/a/571326
la source