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ł?
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ł?
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 unlimited
aby 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/cwd
gdzie $pid
jest 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ć find
na całym systemie ...
Systemy używające systemd są zwykle skonfigurowane do zrzutów rdzeni
Możesz użyć tego
coredumpctl
polecenia, aby wyświetlić zrzuty pamięci. Zobacz także: no-more-coredumps-after-migration-to-systemdźródło