Il y a un énorme problème sous Linux dans ce cas si vous vous approchez de la condition de mémoire insuffisante - vous remarquerez que l'ensemble de votre système ne répond plus du tout car il commence beaucoup de permutation. Même le curseur de votre souris peut devenir si «lent» que vous ne pouvez pas démarrer un terminal et tuer manuellement un processus de mangeur de mémoire incriminé. Cela est dû au grand nombre d'opérations sur disque.
Pour éviter cette situation, personnellement, je désactive généralement complètement le swap, donc le noyau Linux est toujours réactif et dans le pire des cas, le tueur de mémoire insuffisante (OOM) tuera certains processus. La logique du processus tué par le MOO dépend de la version du noyau.
La réponse est donc non - n'activez pas l'allocation dynamique de swap. Vous ferez face à un blocage de la machine.
Il est facile de l'essayer avec un programme qui alloue constamment de la mémoire en boucle. Enregistrer ce programme dans un fichier texte, memeater.c
:
#include <stdlib.h>
int main() {
for (;;) {char* mem=malloc(4096); mem[0]=1;};
}
Ensuite, compilez-le:
$ gcc memeater.c -o memeater
et courir:
$ ./memeater
Essayez-le avec swap, sans swap et avec votre allocation de swap dynamique.
En outre, gardez à l'esprit que dans la plupart des cas, cette condition de MOO se produit en raison d'un bogue dans le logiciel (fuite de mémoire) ou que vous avez fait quelque chose de mal comme «charger ce fichier de 10 Go dans l'éditeur» ou «exécuter trop de redimensionnements de fichiers graphiques en parallèle» et faire la conclusion: avez-vous besoin de swap ou non?