OAT killer ne fonctionne pas?

30

Si je comprends bien, lorsque le système est proche de ne pas avoir de mémoire libre, le noyau devrait commencer à tuer les processus pour retrouver de la mémoire. Mais dans mon système, cela ne se produit pas du tout.

Supposons un script simple qui alloue beaucoup plus de mémoire que celui disponible dans le système (un tableau avec des millions de chaînes, par exemple). Si je lance un script comme celui-ci (en tant qu’utilisateur normal), il ne reste plus que la mémoire jusqu’à ce que le système se fige complètement (seul SysRQ REISUB fonctionne).

La partie étrange ici est que lorsque l’ordinateur se fige, le voyant du disque dur s’allume et le reste jusqu’à ce que l’ordinateur redémarre, que je dispose ou non d’une partition de swap!

Mes questions sont donc:

  1. Ce comportement est-il normal? Il est étrange qu'une application exécutée en tant qu'utilisateur normal puisse simplement planter le système de cette façon ...
  2. Y a-t-il un moyen de faire en sorte qu'Ubuntu tue automatiquement ces applications lorsqu'elles ont trop (ou plus) de mémoire?

Informations supplémentaires

  • Ubuntu 12.04.3
  • Kernel 3.5.0-44
  • RAM: ~ 3,7 Go à partir de 4 Go (partagé avec la carte graphique). *

    $ tail -n+1 /proc/sys/vm/overcommit_*
    ==> /proc/sys/vm/overcommit_memory <==
    0
    
    ==> /proc/sys/vm/overcommit_ratio <==
    50
    
    $ cat /proc/swaps
    Filename                Type        Size    Used    Priority
    /dev/dm-1                               partition   4194300 344696  -1
    
posée Salem 31.12.2013 - 19:21
la source

3 réponses

24

De la documentation officielle /proc/sys/vm/* :

  

oom_kill_allocating_task

     

Ceci active ou désactive la mise à mort de la tâche de déclenchement de MOO dans   situations hors mémoire.

     

Si cela est mis à zéro, le tueur OOM va parcourir tout le   liste de tâches et sélectionnez une tâche basée sur des heuristiques à tuer. Cela normalement   sélectionne une tâche volumineuse qui libère une grande quantité de   mémoire lorsque tué.

     

Si cette option est définie sur zéro, le tueur OOM supprime simplement la tâche   déclenché la condition de mémoire insuffisante. Cela évite le cher   analyse de la liste des tâches.

     

Si panic_on_oom est sélectionné, il a priorité sur toute valeur   est utilisé dans oom_kill_allocating_task.

     

La valeur par défaut est 0.

Pour résumer, lorsque vous définissez oom_kill_allocating_task sur 1 , au lieu d’analyser votre système à la recherche de processus à éliminer, ce qui représente une tâche coûteuse et lente, le noyau ne fera que tuer le processus de mémoire.

D'après mes propres expériences, lorsqu'un MOO est déclenché, le noyau n'a plus assez de "force" pour effectuer une telle analyse, ce qui rend le système totalement inutilisable.

En outre, il serait plus évident de tuer la tâche à l’origine du problème, aussi je ne comprends pas pourquoi elle est définie sur 0 par défaut.

Pour tester, vous pouvez simplement écrire dans le pseudo-fichier approprié dans /proc/sys/vm/ , qui sera annulé au prochain redémarrage:

echo 1 | sudo tee /proc/sys/vm/oom_kill_allocating_task

Pour un correctif permanent, écrivez ce qui suit dans /etc/sysctl.conf ou dans un nouveau fichier sous /etc/sysctl.d/ , avec une extension .conf ( /etc/sysctl.d/local.conf par exemple):

vm.oom_kill_allocating_task = 1
    
réponse donnée Teresa e Junior 09.01.2014 - 16:42
la source
7

Mise à jour: le bogue est corrigé.

La réponse de Teresa est suffisante pour résoudre le problème et est bonne.

En outre, j'ai déposé un rapport de bogue: lien

Parce que c'est définitivement un comportement cassé.

    
réponse donnée int_ua 21.08.2014 - 16:08
la source
-1

Tout d’abord, je recommande la mise à jour vers la version 13.10 (installation propre, sauvegarde de vos données).

Si vous ne souhaitez pas mettre à jour, remplacez vm.swappiness par 10 et si vous rencontrez des problèmes avec votre ram, installez zRAM.

    
réponse donnée Brask 09.01.2014 - 15:02
la source

Lire d'autres questions sur les étiquettes