Oprócz innych odpowiedzi możesz skonfigurować Linuksa tak, aby wymagał tworzenia kopii zapasowej dla przydzielonej pamięci, nawet jeśli programy jej nie używają.
Nadmierna pamięć i obawa przed zabójcą OOM nie są jednak niezbędnymi elementami Linuksa. Po prostu ustawienie parametru sysctl vm / overcommit_memory na 2 wyłącza zachowanie nadmiaru i utrzymuje OOM zabójcę na zawsze na dystans. Większość nowoczesnych systemów powinna mieć wystarczającą ilość miejsca na dysku, aby zapewnić wystarczający plik wymiany w większości sytuacji. Zamiast próbować zabić procesy zwierząt domowych przed zabiciem, gdy skończy się nadmierna pamięć, może być łatwiej po prostu uniknąć sytuacji. [ Wytchnienie od zabójcy OOM ]
Jeśli program przydziela pamięć, jądro może po prostu oznaczyć więcej stron wymiany jako zatwierdzone. To wskazanie jest przechowywane w menedżerze pamięci jądra, faktyczne miejsce na dysku nie zostało jeszcze dotknięte. Dopóki pamięć nie zostanie wykorzystana, nic nie trzeba zamieniać i zamieniać. Jeśli nigdy nie będą używane, użycie wymiany będzie się zmieniać bez wpływu na wydajność.
Ponieważ procesy są prezentowane z własną przestrzenią adresową lub „widokiem” (tak właśnie działa zamiana), jądro ma dużą swobodę w zarządzaniu tym. Korzystając z przykładu rozwidlenia również z powyższego artykułu, ponieważ znacznie bardziej prawdopodobne jest, że strony pamięci współdzielonej niż świeżo przydzielą dużą ilość nieużywanej pamięci, pamięć można przydzielić kopiowaniu przy zapisie, zwiększając liczbę operacji wymiany. Kiedy jest faktycznie napisane do (co może się nie zdarzyć), wówczas „zatwierdzoną zamianę” można zastąpić dowolną nieużywaną pamięcią RAM (następnie zwiększając użycie pamięci RAM i zmniejszając użycie wymiany). Wyobraź sobie proces z przydzielonym 500 MB, który powoduje rozwidlenie na maszynie z całą lub prawie całą pamięcią RAM. Jeśli w swapie jest dostępne 500 MB (a miejsce na dysku jest tanie, jak duży jest 1% dzisiejszych dysków TB?: P), nie trzeba kopiować pamięci (jeszcze,
W ten sposób unika się możliwości zabójcy OOM i znacznie łatwiej jest zaprojektować większość oprogramowania przy założeniu, że przydziały pamięci (w tym przydziały „niejawne” poprzez coś takiego jak rozwidlenie) albo udają się, albo kończą natychmiast, z praktyczną świadomością, że jeśli pamięć musi być zamienione, to może wpłynąć na wydajność. Wpływ ten jest prawie zawsze niewielki, ale w najgorszym przypadku prowadzi do przełamania zamiany (nadal czasami jest to lepsze niż bezpośrednie awarie jądra lub zabójca OOM).
Chociaż nie znam dokładnych szczegółów działania menedżera pamięci dla systemu Linux, ta odpowiedź jest moim uogólnionym zrozumieniem i pamiętam, że czytałem przez lata. Próbowałem ponownie edytować tę odpowiedź, więc wymagane jest minimalne zrozumienie projektu systemu operacyjnego (jest to znacznie skomplikowane i nie jest to coś, co mnie bardzo interesuje), ale wydaje się, że trochę się kręci; daj mi znać, jeśli zobaczysz, jak można to poprawić. Chwytliwa ręka może nie być tak zawstydzająco podstawowym pytaniem.