Gdzie szukać pliku podstawowego wygenerowanego przez awarię aplikacji linux?

19

Próbuję znaleźć przyczynę awarii jednej z moich aplikacji Linux. Ale nie wiem, dokąd zmierza rdzeń.

cat /proc/sys/kernel/core_pattern
core.%e.%p

Dowolny pomysł?

dcds
źródło

Odpowiedzi:

23

Zrzut rdzenia zapisywany jest w bieżącym katalogu procesu w momencie awarii.

Oczywiście zrzuty rdzenia muszą być włączone, domyślnie są one zwykle wyłączone. Sprawdź dane wyjściowe ulimit -c, jeśli jest to 0, to nie zostanie zapisany żaden plik rdzenia. Uruchom, ulimit -c unlimitedaby włączyć zrzuty pamięci; jest to ustawienie na proces, które jest dziedziczone przez procesy uruchomione przez ten proces.

Jeśli powinien zostać wygenerowany zrzut rdzenia, ale nie wiesz, gdzie to jest, możesz ponownie rozpocząć proces (jeśli natychmiast się nie zawiesi), a następnie sprawdź jego katalog roboczy, wykonując ls -l /proc/$pid/cwdgdzie $pidjest identyfikatorem procesu. Ten link wskaże bieżący katalog roboczy tego procesu. Są szanse, że zrzut rdzenia będzie tam. W przeciwnym razie musisz uruchomić findna całym systemie ...

wurtel
źródło
3
Sprawdziłem, czy ulimit -c jest nieograniczony, ale wciąż nie ma nic w bieżącym katalogu procesu.
dcds
1
Możliwe, że aplikacja sama wykryła błąd krytyczny i została przerwana, tzn. Nie jest to „rzeczywista” awaria, taka jak naruszenie segmentacji lub podobne, co spowodowałoby zrzut pamięci. Ponieważ nie podajesz żadnych informacji o aplikacji, nie możesz tego wiedzieć.
wurtel
1
To zdecydowanie awaria, bo świadomie robię zerowy wskaźnik.
dcds
20

Systemy używające systemd są zwykle skonfigurowane do zrzutów rdzeni

/var/lib/systemd/coredump/

Możesz użyć tego coredumpctlpolecenia, aby wyświetlić zrzuty pamięci. Zobacz także: no-more-coredumps-after-migration-to-systemd

StefanQ
źródło