Czy jest możliwe, aby system zapobiegawczo wymieniał nieaktywne strony ( vm.swappiness
), ale wywołuje funkcję Oom-Killer, gdy systemowi kończy się pamięć RAM (w przeciwieństwie do wyczerpywania pamięci) i jest zmuszony do zamiany?
Ostatecznym celem jest powstrzymanie systemu przed zatrzymaniem się, gdy zacznie psuć dysk z powodu poważnych błędów strony, ale nadal pozwoli na zamianę nieaktywnych stron.
Innym pragnieniem byłoby skonfigurowanie ilości pamięci wymiany, którą system jest zmuszony użyć przed uruchomieniem programu oom-killer. W ten sposób system może się trochę zamieniać, o ile nie posunie się za daleko. Lub mógłbym ustawić taki próg, aby uruchomić Oom-Killera przed użyciem całej pamięci RAM, aby zawsze było miejsce na pamięć podręczną systemu plików (a tym samym uniknąć większego dyskowania).
Nie wydaje się, żeby to było takie trudne. Wygląda na to, że możesz po prostu powiedzieć oom-killerowi, aby uruchomił się, gdy system używa X-ram używanego / wolnego. Ale dlatego pytam; Nie wiem
Dla wyjaśnienia nie chcę wyłączać wymiany ani dostosowywać vm.swappiness
parametru
źródło
Odpowiedzi:
Walczyłem również z tym problemem. Chcę tylko, aby mój system pozostał responsywny, bez względu na wszystko, i wolę tracić procesy niż czekać kilka minut. Wydaje się, że nie ma sposobu na osiągnięcie tego przy użyciu narzędzia do zabijania jądra.
Jednak w przestrzeni użytkownika możemy robić, co chcemy. Napisałem więc demona Early OOM ( https://github.com/rfjakob/earlyoom ), który zabije największy proces (przez RSS), gdy dostępna pamięć RAM spadnie poniżej 10%.
Bez wczesnej przerwy można łatwo zablokować maszynę (8 GB pamięci RAM), uruchamiając http://www.unrealengine.com/html5/ kilka razy. Teraz winne karty przeglądarki giną, zanim sprawy wymkną się spod kontroli.
źródło
column -t -s,
niektóre ogromne pliki csv i pozwolićearlyoom
zabijać je, gdy nie jest to możliwe, zanim zauważę brak reakcji.To brzmi jak zbyt skomplikowane rozwiązanie. Sugerowałbym (i robię to na maszynach, które konfiguruję, które nie wymagają hibernacji) po prostu przydzielając niewielką ilość przestrzeni wymiany (128-256 MB). W ten sposób jądro może zamieniać niektóre strony, ale OOM-killer jest wywoływany, zanim coś się pogorszy.
Jeśli naprawdę chcesz to zrobić, myślę, że musisz napisać własny skrypt / program, który monitoruje użycie wymiany i wywołuje OOM- killera za pomocą klucza Magic SysReq (co można zrobić programowo, pisząc do
/proc/sysrq-trigger
).źródło
vm.swappiness
i wymuszona zamiana z powodu wyczerpania pamięci RAM. Wszystko, co musi się zdarzyć, to kiedy jądro jest zmuszone do zamiany, aby uruchomić Oom-Killera. 10 GB pozostawia również mnóstwo miejsca na wymuszoną zamianę dysku.