Mam upstart zadanie, które czasami zawiesza się z błędem segmentacji i mam kilka pytań na temat zrzutów rdzenia.
Najpierw powinienem dodać zwrotkę:
limit core unlimited unlimited
Czy jest wada dopuszczania nieograniczonej liczby rdzeni? Czy limit skończony byłby lepszy?
Po drugie, gdzie pójdzie plik podstawowy? Jeśli wartość domyślna nie jest standardowym ani logicznym miejscem, jak sprawić, by pojawiała się gdzie indziej?
upstart
segmentation-fault
ulimit
brooks94
źródło
źródło
Odpowiedzi:
Nieograniczone zrzuty rdzenia nie są zalecane w większości sytuacji, ale są technicznie w porządku. Zrzut rdzenia ma tylko „całą pamięć” obecnego procesu. Więc co najwyżej może być tak duży, jak twój ram + swap. Mamy nadzieję, że masz więcej wolnego miejsca.
W prawdziwym życiu powinny one być „małe” w porównaniu do całkowitej pamięci RAM + zamiana.
Plik „powinien” skończyć w „bieżącym katalogu”. Dla zadań upstart, które nie są chdir, to zwykle /. Jeśli zmienią katalog, to ty sam musisz go wytropić. Możesz jednak na stałe zakodować dla nich ścieżkę.
Powinieneś być w stanie sprawdzić
/proc/sys/kernel/core_pattern
„wzorzec”. Jeśli ustawisz wzorzec na coś podobnego,echo "/var/log/core" > /proc/sys/kernel/core_pattern
wszystkie twoje rdzenie powinny skończyć się w / var / logźródło
Plik podstawowy to obraz procesu tworzony przez system operacyjny, gdy proces nieoczekiwanie kończy się. Pliki podstawowe są tworzone, gdy program źle działa z powodu błędu lub naruszenia procesora lub mechanizmów ochrony pamięci. System operacyjny zabija program i tworzy plik podstawowy.
Ten plik może być bardzo przydatny w ustalaniu, co poszło nie tak z procesem. Tworzenie podstawowych plików może być domyślnie włączone, w zależności od dystrybucji i wersji systemu Linux.
Jeśli nie chcesz wcale plików podstawowych, ustaw „ulimit -c 0” w plikach startowych. Jest to domyślne w wielu systemach; w
/etc/profile
których możesz znaleźćPonieważ obcięte pliki nie mają praktycznego zastosowania, ustaw rozmiar podstawowego pliku Linux na „nieograniczony”.
Plik podstawowy jest umieszczany w bieżącym katalogu roboczym procesu, z zastrzeżeniem uprawnień do zapisu dla procesu JVM i wolnego miejsca na dysku.
W zależności od poziomu jądra dostępna jest przydatna opcja jądra, która nadaje plikom rdzeniowym bardziej znaczące nazwy. Jako użytkownik root opcja sysctl -w jądro.core_users_pid = 1 zapewnia, że pliki podstawowe mają nazwę „Core.PID”.
Jeśli chcesz mieć podstawowe pliki, musisz je zresetować we własnym pliku .bash_profile:
pozwoli na pliki podstawowe, ale ograniczy je do 50 000 bajtów.
Masz większą kontrolę nad plikami podstawowymi w
/proc/sys/kernel/
Na przykład możesz wyeliminować oznaczony na pid przez
Pliki podstawowe zostaną wtedy nazwane „core”. Ludzie robią takie rzeczy, aby użytkownik mógł umieścić niepisywalny plik o nazwie „core” w katalogach, w których nie chce generować zrzutów pamięci. Może to być katalog (mkdir core) lub plik (touch core; chmod 000 core).
Ale być może bardziej interesujące jest to, że możesz zrobić:
Wszystkie
/tmp/corefiles
pliki core są następnie rzucane do (nie zmieniaj core_uses_pid, jeśli to zrobisz).Przetestuj to za pomocą prostego skryptu:
W systemie Ubuntu tworzenie podstawowych plików jest kontrolowane przez plik
/etc/default/collectd
. Możesz włączyć tworzenie zrzutów pamięci, ustawiając:Lokalizowanie pliku podstawowego
Gdy demon się zawiesi, plik zostanie utworzony w bieżącym katalogu roboczym. Domyślnie jest to
pkglocalstatedir
npprefix/var/lib/collectd
. Jeśli zainstalowałeś pakiet, ten katalog jest najprawdopodobniej/var/lib/collectd
.Źródła: AP Lawrence i IBM
źródło