Jądro zarejestruje kilka rzeczy, zanim to się stanie, ale większość z nich prawdopodobnie nie będzie dostępna, w /var/log/messages
zależności od (r)syslogd
konfiguracji. Próbować:
grep oom /var/log/*
grep total_vm /var/log/*
Ten pierwszy powinien pojawić się kilka razy, a drugi tylko w jednym lub dwóch miejscach. To jest plik, który chcesz obejrzeć.
Znajdź oryginalny wiersz „Brak pamięci” w jednym z plików, który również zawiera total_vm
. Trzydzieści sekund do minuty (może być więcej, może być mniej) przed tą linią znajdziesz coś takiego:
kernel: foobar invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Powinieneś także znaleźć tabelę gdzieś pomiędzy tą linią a linią „Brak pamięci” z takimi nagłówkami:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
To może niewiele powiedzieć, niż już wiesz, ale pola są następujące:
- pid Identyfikator procesu.
- identyfikator użytkownika.
- tgid Identyfikator grupy wątków.
- total_vm Wykorzystanie pamięci wirtualnej (na stronach 4 kB)
- rss Wykorzystanie pamięci rezydentnej (na stronach 4 kB)
- nr_ptes Wpisy w tabeli stron
- swapents Zamień wpisy
- oom_score_adj Zwykle 0; niższa liczba wskazuje, że proces będzie mniej podatny na śmierć po wywołaniu zabójcy OOM.
Możesz w większości zignorować nr_ptes
i swapents
chociaż uważam, że są to czynniki decydujące o tym, kto zostanie zabity. Niekoniecznie jest to proces wykorzystujący najwięcej pamięci, ale najprawdopodobniej tak jest. Aby uzyskać więcej informacji na temat procesu wyboru, zobacz tutaj . Zasadniczo proces, który kończy się najwyższym wynikiem oom, zostaje zabity - taki jest „wynik” podany w wierszu „Brak pamięci”; niestety inne wyniki nie są zgłaszane, ale ta tabela zawiera pewne wskazówki dotyczące czynników.
Ponownie, prawdopodobnie nie zrobi to więcej niż tylko wyjaśnienie oczywistości: system zabrakło pamięci i mysqld
został wybrany, aby umrzeć, ponieważ zabicie go uwolniłoby najwięcej zasobów . Nie oznacza mysqld
to, że robi coś złego. Możesz spojrzeć na tabelę, aby sprawdzić, czy coś innego nie poszło w tym czasie poza linię, ale może nie być wyraźnego winowajcy: w systemie może zabraknąć pamięci tylko dlatego, że źle oceniłeś lub źle skonfigurowałeś uruchomione procesy.
dmesg
?