Czasami pracuję z dużymi zrzutami danych, które chcę zachować w pamięci do przetwarzania. Czasami przeliczyłem ilość pamięci, którą wytworzy mój program, lub debugger zwielokrotnia użycie pamięci przez czynnik, który przekracza moją dostępną pamięć.
Ilekroć zaczynam proces wymagający dużej ilości pamięci, tego właśnie oczekuję od rozsądnego systemu operacyjnego: spróbuj zjeść całą wolną pamięć, a następnie poproś o inne nieistotne procesy, aby zrezygnować z pamięci, której nie potrzebują, a następnie napisz do zamiany.
Oto, co robi dla mnie Ubuntu: zjedz całą wolną pamięć, następnie poproś system operacyjny o zamianę wszystkich niezbędnych usług (sesja gnome, terminal, klawiatura), a następnie zamrożenie i poczekaj, aż wyciągnę wtyczkę.
Dwa pytania:
- Jak system operacyjny może założyć, że wszystko może być tak ważne, że można przestać słuchać informacji wprowadzanych przez użytkownika?
- Jak mogę powiedzieć Ubuntu, aby nigdy nie zamieniał podstawowych usług i zawsze reagował na dane wejściowe użytkownika, nawet jeśli jakiś głupi proces próbuje zużyć więcej zasobów niż zapewnia system.
swapon
aby się dowiedzieć)? Pozdrawiam, Alswappiness
ustawienie na 10, tj .:vm.swappiness = 10
w /etc/sysctl.conf. Wyszukaj tutaj swapiness, aby uzyskać więcej informacji na ten temat. 2) Jeśli zamiana nie pomoże ... Nawet jeśli nie chcesz ... zwiększyć rozmiaru pliku wymiany do 1,5x16G i sprawdź, czy to pomoże. Informuj mnie na bieżąco. Pozdrawiam, Alvm.swappiness=10
musi zostać DODANO do sysctl.conf. Doświadczona osoba może nawet użyć komendy sysctl w locie, aby ustawić vm.swappiness = 10, bez edytowania pliku sysctl.conf. Pozdrawiam, Al ps: czekam na odpowiedź OP.Odpowiedzi:
Nadal nie mam rozwiązania problemu, ale mogę zaoferować dwa obejścia, które mogą zainteresować innych:
1) wcześnie
Jest to usługa, która obserwuje zużycie pamięci i zabija proces, który zużywa najwięcej pamięci po osiągnięciu określonego progu (zobacz także to i to pytanie dotyczące zabójcy OOM w jądrze Linuksa)
Przetestowałem to w procesie demonstracyjnym, który w nieskończoność żąda pamięci w małych porcjach. Oto moje pierwsze wrażenie: kiedy rozpoczynam nieuczciwy proces, szybko zjada całą moją pamięć RAM. Następnie rozpoczyna się zamiana, system przestaje odpowiadać. Kilka sekund później system powraca do trybu online. Dziennik wczesnej fazy pokazuje, że zabił proces jedzenia pamięci po tym, jak użycie pamięci i wymiany osiągnęło 90%.
Wciąż zaczyna się irytujące opóźnienie, a po zakończeniu procesu niektóre części innych procesów zwykle pozostają w swapie, dopóki nie zostaną o to poproszone, ale to początek.
2) po prostu wyłącz swap
Wiem, że jest to kontrowersyjny temat , ale w przypadku komputerów stacjonarnych, a zwłaszcza komputerów programistycznych, w których może się zdarzyć, że proces próbuje pochłonąć całą twoją pamięć, ma to sens: bez zamiany OOM Killer po prostu działa jak zamierzono. Kiedy zabraknie pamięci, znajdzie najlepszy proces do zabicia i pozbędzie się go. Bez opóźnień, bez opóźnień.
Możesz wyłączyć swap dla bieżącej sesji za pomocą
sudo swapoff -a
lub zmienić na stałe .Właściwym rozwiązaniem tego problemu byłoby oczywiście to, że system pozostaje responsywny, gdy pamięć główna jest wyczerpana i zaczyna wymieniać pamięć, jakby nie było jutra, ale wydaje się, że to się wkrótce nie wydarzy.
źródło
Spróbuj jednej z dwóch rzeczy:
1) zmień ustawienie swapiness z domyślnego 60, na 10, tj .: dodaj vm.swappiness = 10 do /etc/sysctl.conf (w terminalu, typ
sudo gedit /etc/sysctl.conf
), a następnie uruchom ponownie system. Wyszukaj tutaj swapiness, aby uzyskać więcej informacji na ten temat.2) Jeśli zamiana nie pomoże ... nawet jeśli nie chcesz ... zwiększyć rozmiaru pliku wymiany do 1,5x16G i sprawdź, czy to pomoże.
Informuj mnie na bieżąco. Pozdrawiam, Al
źródło
top
celu zabicia pamięci pamięci). Po minucie proces zostaje zabity. Nie idealnie, ale zbliżamy się.Rozwiązałem podobny problem. Nie wiem, czy moje doświadczenie może ci się przydać ...
Niedawno opublikowałem przewodnik na temat instalacji systemu Linux na sprzężonych sprzężeniach zwrotnych urządzeniach LVM uruchamianych z USB (więc bez konieczności instalowania gruba na dysku wewnętrznym, pozostawiając go jako oryginalny). Oto przewodnik: https://github.com/DareDevil73/linux-on-loopback-usb .
Potem wpadłem w problem zamrożenia przy dużym obciążeniu pamięci i zaobserwowałem nieprawidłowe użycie przestrzeni wymiany (zużycie całej pamięci RAM i zużycie wymiany prawie do zera). Oczywiście partycja wymiany LVM została zamontowana i działa poprawnie, ale nie wiem, dlaczego jądro nie używało jej zgodnie z oczekiwaniami.
Próbowałem alternatywnego rozwiązania. Utworzyłem plik zwrotnej wymiany (nie LVM) i zamrażanie zniknęło. Teraz plik wymiany jest używany tak, jak byłby, a system operacyjny nigdy się nie zawiesza!
Więcej informacji znajdziesz na https://github.com/DareDevil73/linux-on-loopback-usb#known-issues .
źródło