Est-il possible que le système permute de manière préventive les pages inactives ( vm.swappiness
), mais invoque le tueur à gages lorsque le système manque de RAM (par opposition à manquer de mémoire) et est forcé de permuter?
Le but ultime est d'empêcher le système de s'arrêter lorsqu'il commence à écraser le disque en raison de défauts de page majeurs, tout en laissant les pages inactives permutées.
Un autre souhait serait de configurer la quantité de mémoire d'échange que le système est obligé d'utiliser avant le déclenchement de oom-killer. De cette façon, le système peut plonger un peu dans l'échange, tant qu'il ne va pas trop loin. Ou je pourrais définir un tel seuil pour déclencher oom-killer avant d'utiliser toute la RAM afin qu'il y ait toujours de la place pour le cache du système de fichiers (et ainsi éviter plus de thrash de disque).
Il ne semble pas que ce soit si difficile à faire. Il semble que vous puissiez simplement dire au tueur d'oom de se déclencher lorsque le système a X ram utilisé / libre. Mais c'est pourquoi je demande; Je ne sais pas.
Pour plus de précision, je ne cherche pas à désactiver le swap ou à ajuster le vm.swappiness
paramètre
la source
Réponses:
J'ai également eu du mal avec ce problème. Je veux juste que mon système reste réactif, quoi qu'il arrive, et je préfère perdre des processus à 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 premier démon OOM ( https://github.com/rfjakob/earlyoom ) qui tuera le plus gros processus (par RSS) une fois que la RAM disponible sera inférieure à 10%.
Sans earlyoom, il a été facile de verrouiller ma machine (8 Go de RAM) en démarrant http://www.unrealengine.com/html5/ plusieurs fois. Maintenant, les onglets du navigateur coupable sont tués avant que les choses ne dégénèrent.
la source
column -t -s,
sur d'énormes fichiers csv et laisser leearlyoom
tuer quand ce n'est pas possible, avant de remarquer une absence de réponse.Cela ressemble à une solution trop élaborée. Je suggérerais (et je le fais sur des machines que j'ai configurées qui n'ont pas besoin d'hiberner) d'allouer simplement une petite quantité d'espace de swap (128-256MiB). De cette façon, le noyau peut échanger certaines pages, mais le tueur OOM est invoqué avant que les choses ne tournent mal.
Si vous voulez vraiment faire cela, je pense que vous devrez écrire votre propre script / programme qui surveille l'utilisation du swap et invoque le tueur OOM en utilisant la clé Magic SysReq (ce qui peut être fait par programmation en écrivant à
/proc/sysrq-trigger
).la source
vm.swappiness
et le swap forcé dû au manque de RAM. Tout ce qui doit arriver, c'est quand le noyau est obligé de permuter, pour déclencher oom-killer. Et 10 Go laisse également des tonnes d'espace pour un échange forcé afin de battre le disque.