Wadą nieograniczonego rozmiaru rdzenia? Gdzie idą podstawowe pliki?

8

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?

brooks94
źródło
czy mógłbyś zaktualizować nas swoją nową pracą
Qasim

Odpowiedzi:

6

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_patternwszystkie twoje rdzenie powinny skończyć się w / var / log

Coteyr
źródło
5

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/profilektórych możesz znaleźć

Ponieważ obcięte pliki nie mają praktycznego zastosowania, ustaw rozmiar podstawowego pliku Linux na „nieograniczony”.

Usage of ulimit         Action
ulimit -c               # check the current corefile limit
ulimit -c 0             # turn off corefiles
ulimit -c x             # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited     # turn on corefiles with unlimited size
ulimit -n unlimited     # allows an unlimited number of open file descriptors
ulimit -p               # size of pipes
ulimit -s               # maximum native stack size for a process
ulimit -u               # number of user processes
help ulimit             #list of other options

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”.

ulimit -S -c 0 > /dev/null 2>&1

Jeśli chcesz mieć podstawowe pliki, musisz je zresetować we własnym pliku .bash_profile:

ulimit -c 50000

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

echo "0" > /proc/sys/kernel/core_uses_pid 

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ć:

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 

Wszystkie /tmp/corefilespliki core są następnie rzucane do (nie zmieniaj core_uses_pid, jeśli to zrobisz).

Przetestuj to za pomocą prostego skryptu:

# script that dumps core 
kill -s SIGSEGV $$ 

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:

ENABLE_COREFILES=1

Lokalizowanie pliku podstawowego

Gdy demon się zawiesi, plik zostanie utworzony w bieżącym katalogu roboczym. Domyślnie jest to pkglocalstatedirnp prefix/var/lib/collectd. Jeśli zainstalowałeś pakiet, ten katalog jest najprawdopodobniej /var/lib/collectd.

Źródła: AP Lawrence i IBM

Mitch
źródło