Brak zrzutów po ostatnich aktualizacjach systemd?

12

Gdy uruchamiam program, nad którym pracuję, kończy się niepowodzeniem, pojawia się następujący komunikat:

...
Aborted (core dumped)

Jednak nie zostanie utworzony zrzut pamięci. Zrzuty rdzenia zostały napisane wcześniej i nie pamiętam, że zmieniłem coś z tym związanego.

Kiedy biegnę ulimit -a, wracam,

$ ulimit -a
core file size          (blocks, -c) unlimited
...

Inne punkty,

  • Zweryfikowałem, że mój użytkownik może tworzyć pliki w bieżącym katalogu.
  • Czytam o /proc/sys/fs/suid_dumpable. Obecnie jest ustawiony na 0 na moim komputerze. Próbowałem zmienić to na 1 lub 2, ale bez różnicy.
  • Próbowałem również uruchomić program jako root, ale to też nie miało znaczenia.

Niestety nie pamiętam, kiedy mogłem wyprodukować ostatni udany zrzut pamięci.

Philipp Claßen
źródło

Odpowiedzi:

8

Od docs na coredump.conf,

Aby wyłączyć plik konfiguracyjny dostarczony przez dostawcę, zalecanym sposobem jest umieszczenie dowiązania symbolicznego /dev/nullw katalogu konfiguracyjnym w /etc/pliku o takiej samej nazwie jak plik konfiguracyjny dostawcy.

sudo ln -s /dev/null /etc/sysctl.d/coredump.conf
sudo systemd-sysctl 

Od systemd, rzeczy są zarządzane inaczej.

schaiba
źródło
Wow, masz rację! Niedawno przełączyłem się na systemd. sudo systemd-coredumpctlpokazuje wszystkie brakujące zrzuty rdzenia. Twoje rozwiązanie działało, ale dopiero po ponownym uruchomieniu systemu.
Philipp Claßen,
1
systemd„s systemd-sysctl.serviceprostu działa sysctlwe właściwym punkcie startu i obsługuje ponowne uruchomienie go przez strony zmian. I nie twórz / zastępuj plików konfiguracyjnych bez sprawdzenia, do czego służą i ich zawartości.
vonbrand
1
Nazwa pliku wydaje się być zmieniona 50-coredump.conf, aby zastosować ustawienia w bieżącym rozruchu, musiałem uruchomić ręcznie zmienić ustawienie sysctl, patrz stackoverflow.com/q/2065912/427545 .
Lekensteyn,
2
Aby przywrócić wartość domyślną, nie ustawiaj pustego ciągu, użyj tego zamiast:sysctl -w kernel.core_pattern="core"
Lekensteyn,
2

Możesz użyć coredumpctlpolecenia do odzyskania zrzutu pamięci lub uruchomienia na nim gdb. Jest to „systemowo zatwierdzona” metoda radzenia sobie z nimi. : - /

W pewnym sensie fajnie jest, gdy systemd przechwytuje wszystkie te rzeczy, ponieważ po pewnym czasie usunie je automatycznie, a także ułatwia przesyłanie zrzutów awaryjnych w celu zgłaszania błędów.

Była to jednak wstrząsająca zmiana, która nie wpłynęła na sposób powiadamiania ani podpowiedzi dla osób, które wiedziały, jak działają rdzeniowce, zanim zaangażował się systemd. Nawet upuszczenie pliku o nazwie „core.pid.txt” z instrukcjami, jak użyć coredumpctl, aby uzyskać zrzut rdzeniowy, a także jak wyłączyć tworzenie .txtplików, byłby bardzo pomocny, nawet jeśli te zaśmiecałyby również system plików na jakiś czas.

Wszelaki
źródło