J'utilise mon ordinateur pour la programmation scientifique. Il a beaucoup 8GB
de RAM et 12GB
d’espace de swap. Souvent, à mesure que mes problèmes s'aggravent, je dépasse toute la mémoire RAM disponible. Plutôt que de planter (ce qui serait préférable), il semble qu'Ubuntu commence à tout charger en swap, y compris Unity et tous les terminaux ouverts. Si je ne détecte pas un programme en fuite à temps, je ne peux rien faire d'autre que d'attendre - cela prend 4 à 5 minutes pour passer à une invite de commande, par exemple. Ctrl-Alt-F2
où je peux tuer le processus incriminé.
Étant donné que ma propre stupidité dépasse le cadre de ce forum, comment puis-je empêcher Ubuntu de tomber en panne via une compression lorsque j'utilise toute la mémoire disponible d'un seul programme incriminé?
Expérience à la maison *!
Ouvrez un terminal, lancez python
et si vous avez numpy
installé, essayez ceci:
>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]
* Avertissement: peut avoir des effets indésirables, surveillez le processus via iotop
ou top
pour le tuer à temps. Sinon, je te verrai après ton redémarrage.
la source
Les groupes de contrôle doivent vous permettre de limiter votre utilisation de la mémoire processus par processus.
https://en.wikipedia.org/wiki/Cgroups
http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt
L'informatique scientifique est notoirement gourmande en mémoire. En mettant en sandbox votre application dans un groupe de contrôle, le reste des processus ne doit pas devenir une victime, car la pression de la mémoire sera allégée.
Alternativement, une machine virtuelle pourrait être utilisée comme une sorte de limite stricte, car l'application ne peut utiliser que la mémoire déléguée à la machine virtuelle, au détriment des performances. Cependant, une machine virtuelle est beaucoup plus facile à configurer pour les non-initiés que la configuration et la maintenance d'un groupe de contrôle.
Décisions décisions :) Bonne chance!
la source