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”.
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/corefiles
pliki 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 pkglocalstatedir
np prefix/var/lib/collectd
. Jeśli zainstalowałeś pakiet, ten katalog jest najprawdopodobniej /var/lib/collectd
.
Źródła: AP Lawrence i IBM