J'essaie d'adapter mon système de développement à une fiabilité maximale. J'ai désactivé le swap, car pour l’utilisation de l’interface graphique, la machine ne répond plus, ce qui la rend inutilisable. Néanmoins, si des applications agressives consomment de la mémoire, certains mécanismes semblent permettre de tirer le meilleur parti de la vitesse. Il n'y a pas d'opération d'échange de disque dur, mais le système ne répond plus de la même manière. Je souhaite donc que le tueur OOM vienne à l'action avant que le système ne déploie des efforts particuliers pour améliorer la mémoire. Est-il possible de configurer le tueur de MOO pour qu'il agisse s'il y a moins de 100 Mo de mémoire physique libre, par exemple?
34
Réponses:
J'ai également lutté avec ce problème. Je veux juste que mon système reste réactif, quoi qu'il en soit, et je préfère perdre des processus plutôt que d'attendre quelques minutes. Il semble qu’il n’y ait aucun moyen d’y parvenir en utilisant le kernel oom killer.
Cependant, dans l'espace utilisateur, nous pouvons faire ce que nous voulons. J'ai donc écrit le démon Early OOM ( https://github.com/rfjakob/earlyoom ) qui supprimera le plus gros processus (par RSS) une fois que la RAM disponible sera inférieure à 10%.
Sans le début de la session, il a été facile de verrouiller ma machine (8 Go de RAM) en démarrant http://www.unrealengine.com/html5/ à quelques reprises. Maintenant, les onglets du navigateur coupables sont tués avant que les choses ne deviennent incontrôlables.
la source
earlyoom
maintenant, il fait bien dans un premier test de déclenchement. Je me demande simplement pourquoi cela ne peut pas être mis en œuvre par la configuration du noyau ou les outils système.La politique par défaut du noyau est de permettre aux applications de continuer à allouer de la mémoire virtuelle tant qu'il reste de la mémoire physique. La mémoire physique n'est réellement utilisée que lorsque les applications touchent la mémoire virtuelle allouée. Une application peut donc allouer beaucoup plus de mémoire que le système, puis commencer à la toucher plus tard, ce qui entraîne une insuffisance de mémoire du noyau et le déclenchement de la sortie. de la mémoire (MOO) tueur. Cependant, avant que le processus de monopolisation ne soit tué, le cache de disque a été vidé, ce qui ralentit le temps de réponse du système jusqu'à ce que le cache se remplisse.
Vous pouvez modifier la stratégie par défaut pour interdire tout dépassement de mémoire en écrivant une valeur de 2 à
/proc/sys/vm/overcommit_memory
. La valeur par défaut/proc/sys/vm/overcommit_ratio
est 50. Par conséquent, le noyau n'autorisera pas les applications à allouer plus de 50% de ram + swap. Si vous n'avez pas d'échange, le noyau n'autorisera pas les applications à allouer plus de 50% de votre mémoire RAM, laissant les 50% restants libres pour le cache. Cela peut être un peu excessif, vous pouvez donc augmenter cette valeur pour qu’elle atteigne environ 85%, afin que les applications puissent allouer jusqu’à 85% de votre mémoire vive, laissant 15% pour le cache.la source
I disabled swap, because for GUI usage it mostly renders the machine unresponsive in such a way not useable anymore.
. Il a mentionné l'interface graphique, alors que vous supposez qu'il exécute une commande. L'achat de plus de mémoire est la première solution, l'utilisation de moins de mémoire vous-même est la deuxième solution. Rendre votre système instable en bidouillant les valeurs par défaut stables est la dernière solution. Il n'est pas nécessaire de répondre à la question à la lettre, alors je ne vois pas en quoi votre problème est que vous devez nous déranger tous les deux dans les commentaires. Rant n'aide pas .../proc/meminfo
» deCommitted_AS
les États. Avec certaines applications en cours d'exécution, cette valeur dépasse facilement la mémoire physique, il est donc difficile de définir une limite réalisable de cette manière.Pour moi, définir vm.admin_reserve_kbytes = 262144 fait exactement cela. Le tueur OOM intervient avant que le système ne soit complètement insensible.
la source
Les autres réponses ont de bonnes solutions automatiques, mais j'estime qu'il peut être utile d'activer également la
SysRq
clé lorsque la situation devient incontrôlable. Avec leSysRq
clé, vous enverriez manuellement le noyau par messagerie, et vous pourrez effectuer des opérations telles qu’un redémarrage sécurisé (avecSysRQ + REISUB
) même si l’espace utilisateur est complètement gelé.Pour permettre au noyau d'écouter les requêtes, de définir
kernel.sysrq = 1
ou d'activer uniquement les fonctions que vous êtes susceptible d'utiliser avec un masque de bits (documenté ici ). Par exemplekernel.sysrq = 244
, tous les combos nécessaires au redémarrage sécurisé ci-dessus seront activés, ainsi que l’invocation manuelle du tueur de MOO avecSysRq + F
.la source
La fiabilité n'est pas atteinte par des conditions de mémoire insuffisante et un tueur de MOO.
Il est faux d'organiser une fête dans un placard et de placer "nettoyer mon placard" sur votre petite liste de lecture.
Cela aura des résultats inattendus, car vous n’avez aucun contrôle sur ce qui est tué.
La fiabilité maximale implique de tester votre système et d'améliorer votre système en fonction de ces tests.
Le simple fait de modifier des choses aléatoires ne vous mènera nulle part ...
En raison des conditions de mémoire insuffisante, la désactivation de l'échange n'améliorera pas le comportement , mais le contraire .
Pour augmenter la fiabilité dans cette situation, ajoutez plus de mémoire de sorte que votre système soit plus réactif et qu'aucun processus aléatoire ne soit tué sans la volonté de l'utilisateur. Vous ne devriez pas avoir recours à des conditions de mémoire insuffisante et à un mécanisme comme celui-ci, en particulier dans un environnement de développement ...
Les conditions de mémoire insuffisante entraînent en effet une absence de réponse, que vous ayez un échange ou non.
Des efforts particuliers qui feront plus de mal que de bien, comme je l’ai expliqué plus haut. Au lieu de cela, vous pouvez tuer des processus dont vous n'avez pas besoin vous-même, mais je suppose que vous ne pouvez pas le faire, alors le MOO supprimera les processus dont vous avez besoin.
Peut-être, mais vous obtenez un retour sur investissement plus élevé si vous achetez simplement de la mémoire supplémentaire qui ne coûte pas vraiment cher ces jours-ci. Considérez que vous allez vous frapper le pied à long terme si vous continuez à travailler dans des conditions de mémoire insuffisante. OOM est comme un huissier de justice, il ne vous assiste pas, il assiste l'OS ...
la source
kill
message tapé à l'aveugle.