Si j'ai bien compris, lorsque le système est presque vide, le noyau devrait commencer à tuer les processus pour récupérer 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 ce qui est disponible dans le système (un tableau contenant des millions de chaînes, par exemple). Si j’exécute un script comme celui-ci (en tant qu’utilisateur normal), il n’obtient que toute la mémoire jusqu’à ce que le système se bloque complètement (seul SysRQ REISUB fonctionne).
La partie étrange ici est que lorsque l'ordinateur se bloque, le voyant du disque dur s'allume et reste ainsi jusqu'à ce que l'ordinateur soit redémarré, que je dispose ou non d'une partition de swap montée!
Donc mes questions sont:
- Ce comportement est-il normal? Il est étrange qu'une application exécutée en tant qu'utilisateur normal puisse planter le système de cette manière ...
- Puis-je faire en sorte qu'Ubuntu supprime automatiquement ces applications lorsqu'elles ont trop (ou plus) de mémoire?
Information additionnelle
- Ubuntu 12.04.3
- Noyau 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
Allocation failed
). Mais sans échange cela ne fait que figer l'ordinateur. Est-il censé fonctionner de cette façon (tuer seulement en utilisant swap)?
tail -n+1 /proc/sys/vm/overcommit_*
ajouter la sortie. Voir aussi ici: Comment configurer oom-killer