Używam mojego komputera do programowania naukowego. Ma dużo 8GB
pamięci RAM i 12GB
przestrzeni wymiany. Często, gdy moje problemy stają się większe, przekraczam całą dostępną pamięć RAM. Wydaje się, że Ubuntu zamiast zawieszać się (co byłoby preferowane), ładuje wszystko do wymiany, w tym Unity i wszelkie otwarte terminale. Jeśli nie uda mi się złapać uciekającego programu na czas, nie mogę nic zrobić, tylko czekać - przejście do wiersza polecenia, np. Zajmuje 4-5 minut. Ctrl-Alt-F2
gdzie mogę zabić przestępcę.
Skoro moja własna głupota nie wchodzi w zakres tego forum, jak mogę zapobiec awarii Ubuntu przez thrashowanie, gdy wykorzystuję całą dostępną pamięć z jednego szkodliwego programu?
Eksperyment w domu *!
Otwórz terminal, uruchom, python
a jeśli masz numpy
zainstalowany, spróbuj tego:
>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]
* Ostrzeżenie: może mieć negatywne skutki, monitorować proces poprzez iotop
lub top
zabić go na czas. Jeśli nie, do zobaczenia po ponownym uruchomieniu.
źródło
Grupy C powinny umożliwiać ograniczenie użycia pamięci na podstawie poszczególnych procesów.
https://en.wikipedia.org/wiki/Cgroups
http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt
Informatyka naukowa notorycznie wymaga dużej ilości pamięci. Piaskownica aplikacji w grupie nie powoduje, że reszta procesów nie powinna stać się ofiarą, ponieważ zmniejszy się presja pamięci.
Alternatywnie maszynę wirtualną można zastosować jako rodzaj twardego limitu, ponieważ aplikacja może korzystać z pamięci delegowanej do maszyny wirtualnej, oczywiście kosztem wydajności. Jednak VM jest znacznie łatwiej skonfigurować dla niewtajemniczonych w porównaniu z konfigurowaniem i utrzymywaniem grupy cg.
Decyzje decyzje :) Powodzenia!
źródło