Sur ma machine Debian VM avec 512 Mo de RAM et 348 Mo de swap, que se passera-t-il si j'ouvre un fichier de 1 Go dans un éditeur et que je manque de mémoire?
Va-t-il planter le système? Sinon, comment Linux va-t-il gérer cela?
Ne serait-il pas judicieux d'installer Swapspace donc si nécessaire, il sera créé suffisamment de swap automatiquement et dynamiquement?
sudo apt-get install swapspace
memory
swap
out-of-memory
rubo77
la source
la source
Réponses:
Cela dépend des paramètres que vous utilisez, en particulier de la surcharge de mémoire (
/proc/sys/vm/overcommit_memory
; voirman 5 proc
pour plus de détails).Si la surcharge de mémoire est désactivée, la tentative d'allocation de mémoire de l'éditeur (et éventuellement d'autres programmes tentant en même temps) échouera. Ils obtiendront un résultat d'échec de l'appel système. C'est à chaque programme de gérer cela, bien qu'un résultat malheureusement courant soit que le programme plante. L'éditeur peut également, par exemple, simplement refuser d'ouvrir le fichier.
Si la surcharge mémoire est activée, l'appel système demandant de la mémoire peut bien réussir. Dans ce cas, lorsque la mémoire est réellement accessible, le noyau remarquera sa mémoire insuffisante et tuera un processus pour récupérer de la mémoire. Ce processus peut être ou non l'éditeur. Le choix est régi par
oom_score
(le résultat de plusieurs heuristiques du noyau) etoom_score_adj
(configuré) de chaque processus sur le système. Celles-ci figurent également dans la page de manuel proc (5).la source
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
:Ensuite, compilez-le:
et courir:
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?
la source