Uruchamiając niektóre serwery Linux z pojedynczymi lub tylko kilkoma istotnymi demonami usług systemowych, chciałbym dostosować Killer OOM do tych demonizowanych procesów na wypadek, gdyby wydarzyło się coś dziwnego. Na przykład dzisiaj niektóre serwery Ubuntu z MySQL dostały zabitego demona MySQL, ponieważ tony apt-checker
procesów zajmowały całą pamięć, a jądro uznało, że zabicie MySQL jest dobrym pomysłem.
Wiem, że mogę dostosować wynik za pomocą /proc/$(pidof mysqld)/oom_score_adj
pliku, aby dać jądrze pewną wskazówkę, że nie wolę, aby MySQL został zabity, ale to nie przetrwa ponownego uruchomienia usługi. Czy powinienem edytować skrypty init / upstart z pakietu, aby uwzględnić te dostosowania? Nie sądzę, żeby to było bardzo eleganckie rozwiązanie, ponieważ wprowadzałbym poprawki do plików należących do pakietu. Czy można by ogólnie podłączyć się do skryptów upstart / init i warunkowo go dostosować? A może sugerowałbyś uruchomienie skryptu na czas nieokreślony while true{ adjust_oom(); sleep 60;}
?
źródło
Odpowiedzi:
Istnieje kilka nowoczesnych systemów nadzoru dæmon. (Rzeczywiście, ponieważ istnieje narzędzie do ładowania łańcucha dla zadania, prawdopodobnie wszyscy mają na to sposób.)
oom score
w pliku zadania.OOMScoreAdjust=
ustawienia w jednostce serwisowej. Możesz użyć plików łat jednostki serwisowej, aby wpłynąć na paczkowane jednostki usługowe.oom-kill-protect
z zestawu narzędzi nosh wrun
programie dla usługi.Jeśli konwertujesz jednostkę usług systemowych,
Jako bonus możesz sparametryzować: i ustaw wartość parametru w środowisku usługi (przypuszczalnie czytana z envdir powiązanego z usługą, tutaj manipulowanegoconvert-systemd-units
narzędzie w rzeczywistości przekształciOOMScoreAdjust=
ustawienie w takie wywołanieoom-kill-protect
.rcctl
podkładką nosh ):Dalsza lektura
oom-kill-protect
. zestaw narzędzi nosh. Oprogramowania.oom score
”. Uaktualnij książkę kucharską .OOMScoreAdjust
”.systemd.exec
. systemowe strony podręcznika. freedesktop.org.rcctl
. zestaw narzędzi nosh. Oprogramowania.źródło
Jest to możliwe w Ubuntu przy użyciu Upstart i
oom score
opcji konfiguracji.źródło
Możesz włamać się do samego MySQL (np. OpenSSH to
sshd
robi), ale to jest trochę zbyt hardkorowe i bardzo brudne (problemy z aktualizacjami itp.)Możesz to zrobić w opakowaniu lub w skrypcie inicjującym - partytura powinna zostać odziedziczona (i w opakowaniu, które prawdopodobnie i
exec mysqld "$@"
tak chciałbyś zrobić ).Użyj
cgroups
- da ci to nieco większą elastyczność i może być na stałe w tym sensie, że odpowiednie ustawienia mogą być zastosowane automatycznie przy ponownym uruchomieniu usługi. Zobacz np. Kontrolowanie priorytetu aplikacji za pomocą cgroups, aby uzyskać więcej informacji. Aby osiągnąć automatyzm, którego szukasz, prawdopodobnie powinieneś rzucić okiem na libcgroup , która zawiera demona, który może obsłużyć zmienianie grup cG działających procesów w locie zgodnie z zestawem reguł lub po prostu użyćcgexec
opakowania ( z tego samego pakietu).źródło