J'ai une machine Linux assez ancienne avec 2 Go de RAM, pas de swap, et cela fonctionne très bien, avec le système utilisant chaque morceau de mémoire inutilisé pour la mise en cache avec beaucoup d'effet.
Cependant, lorsque je suis sur le point de surcharger la mémoire (par exemple,> 1950 Mo alloués), cela ralentit en une exploration; Je soupçonne que c'est parce qu'il n'y a plus de tampons de disque. Je sais que le tueur OOM entrerait bientôt en vigueur, mais il n'y arrive généralement pas - il devient si lent que les charges tournent à 30-40, aucun processus ne progresse (donc n'alloue pas plus de mémoire), et Je dois le redémarrer.
Lorsque j'essaie de tuer un seul processus pour que la machine réponde, par exemple en allant sur la console (via Alt-F1, en me connectant et en effectuant simplement un "mauvais processus killall"), cela fonctionne généralement, sauf que je dois attendre ~ 10 minutes entre l'utilisateur / mot de passe et l'obtention d'une invite - tout en présence d'activité sur le disque.
Encore une fois, il n'y a pas d'échange, donc ce n'est pas l'échange - c'est juste une raclée car il n'y a plus de tampons.
J'aurais beaucoup plus de 100 Mo dédiés exclusivement aux tampons de disque, ce qui déclencherait le tueur OOM plus tôt (moins de mémoire pour les programmes, après tout) mais, d'autre part, laisserait la machine réactive à tout moment.
Y-a-t-il un moyen de faire ça? Je n'ai pas pu trouver une entrée / proc / kernel ou / sys / vm qui fait ce genre de chose.
Réponses:
Jetez un œil à / proc / sys / vm / min_free_kbytes . C'est la limite des kilo-octets libres qui déclenche le tueur à gages. De plus, il serait bon de vérifier dans les journaux le mot-clé oom-killer afin de savoir ce qui est tué {de préférence, vous ne voulez pas tuer ssh , il vaut mieux le renier }
la source
Attendre que le tueur à gages libère de la mémoire, c'est un peu comme attendre que le moteur s'arrête sur votre voiture pour vous dire quand il est temps de remplir votre réservoir d'essence. Le tueur à gages est un outil lourd de dernier recours et de désespoir pour une machine affamée de ressources. Il tue le prochain programme qu'il touche sans tenir compte de la façon dont cela affectera votre application, l'accessibilité, la fiabilité, etc. Lorsque le tueur à gages est invoqué, votre serveur est à bout de souffle et dans un état critique.
Au lieu de cela, il vaut mieux adopter une approche active pour gérer votre utilisation de la mémoire dans votre environnement d'application. Vous pouvez surveiller / proc / meminfo en cas de problème et prendre les mesures appropriées et réduire votre charge de travail avant qu'une situation grave ne se gêne.
la source
oom_adj
correctement, vous pouvez faire fonctionner votre système de bureau un peu comme Android, où le système fonctionne pratiquement toujours contre OOM killer (techniquement, il existe un "low memory killer" et il est réglé via/sys/module/lowmemorykiller
). La logique est de marquer en permanence les processus d'arrière-plan non critiques comme des victimes potentielles pour le tueur OOM et de rechercher les processus tués et de redémarrer lentement les programmes tués requis pour éviter de surcharger le système. Assurez-vous simplement que le processus qui continue de relancer d'autres processus est hors des limites pour OOM killer.