Z twojego komentarza wynika, że system po prostu się zmienia.
Linux ma zabójcę OOM, który jest wywoływany, gdy system nadmiernie zajmuje swoją pamięć, a teraz skończył się.
Linux domyślnie wykonuje nadpisywanie pamięci, co w zasadzie oznacza, że daje programom więcej pamięci niż system faktycznie ma. Robi to przy założeniu, że programy nie wykorzystają całej wymaganej pamięci. Jednak gdy w systemie zabraknie pamięci, powiedział już różnym działającym procesom, że mają one pamięć, więc nie można jej dłużej odmawiać. Zamiast tego wywołuje zabójcę OOM. Killer OOM zasadniczo znajduje proces, który zdaniem jądra złagodzi stan braku pamięci. Zwykle jest to tylko proces wykorzystujący najwięcej pamięci, ale algorytm jest w rzeczywistości znacznie bardziej złożony.
Ponieważ overcommit_memoryustawiłeś 0(tryb automatyczny), jądro wykonuje nadpisywanie pamięci. Z twojego wyjaśnionego zachowania wynika, że system po prostu mocno się zmienia.
Stąd są 2 opcje.
Zmniejsz swap
W twoim systemie kończy się pamięć RAM, więc jądro zaczyna pchać rzeczy do zamiany. Jeśli w twoim systemie zabraknie wymiany, wywoła on zabójcę OOM. Ponieważ jednak pozostało wolne miejsce wymiany, tak się nie dzieje.
Twój oryginalny pomysł, ręcznie zabij proces.
Możesz ręcznie zabić proces, jeśli uważasz, że system zamienia się za bardzo i coś musi umrzeć. Można to zrobić za pomocą wyzwalaczy SysRq jądra.
Jądro ma coś, co nazywa „magicznym SysRq”. Jest to trochę funkcji, która każe jądrze wykonać jakąś operację awaryjną. Mogą to być na przykład „ponownie podłącz wszystkie woluminy tylko do odczytu”, „zsynchronizuj wszystkie systemy plików” lub „uruchom ponownie teraz”. Jedną z tych opcji jest również wywołanie zabójcy OOM.
Jeśli twoje jądro ma włączoną funkcję magicznego SysRq (opcja jądra CONFIG_MAGIC_SYSRQ), możesz to zrobić na dwa sposoby.
- Alt+ SysRq+ f
Po prostu naciśnij te 3 klawisze na klawiaturze.
echo f > /proc/sysrq-trigger
Wykona to dokładnie to samo zadanie co metoda klawiatury, ale robi to programowo.
Możesz także całkowicie wyłączyć swap, i właśnie to robię na większości moich systemów i właśnie z tego powodu. Zamiana jest korzystna, ponieważ jądro zapobiegawczo wymienia dane, które nie są używane, pozwalając na użycie większej ilości pamięci RAM do buforowania. Prowadzi to jednak do tego wymuszonego problemu wymiany.
Osobiście uważam, że najlepszym rozwiązaniem jest jakaś opcja jądra do wywołania OOM Killer przy wymuszonej zamianie. Zasadniczo pozwól, aby zapobiegawcza zamiana działała, ale jeśli jądro jest zmuszone przenieść coś do zamiany, ponieważ brakuje Ci pamięci RAM, to wywołaj OOM Killer.
Niestety jest to tylko moje osobiste życzenie. Nie robi tego.