Un file core è l'immagine di un processo che viene creato dal sistema operativo quando il processo termina in modo imprevisto. I file core vengono creati quando un programma si comporta in modo anomalo a causa di un bug o di una violazione della CPU o dei meccanismi di protezione della memoria. Il sistema operativo uccide il programma e crea il file principale.
Questo file può essere molto utile per determinare cosa è andato storto in un processo. La produzione di file core può essere abilitata per impostazione predefinita, a seconda della distribuzione e della versione di Linux che hai.
Se non vuoi affatto i file core, imposta "ulimit -c 0" nei tuoi file di avvio. Questo è il valore predefinito su molti sistemi; in /etc/profile
te potresti trovare
Poiché i file troncati non sono di utilità pratica, impostare la dimensione del file core di Linux su "illimitato".
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
Il file principale viene inserito nella directory di lavoro corrente del processo, soggetto alle autorizzazioni di scrittura per il processo JVM e spazio libero su disco.
A seconda del livello del kernel, è disponibile un'utile opzione del kernel che fornisce ai corefile nomi più significativi. Come utente root, l'opzione sysctl -w kernel.core_users_pid = 1 assicura che i file core abbiano un nome nel formato "Core.PID".
ulimit -S -c 0 > /dev/null 2>&1
Se vuoi i file core, devi reimpostarli nel tuo .bash_profile:
ulimit -c 50000
consentirebbe i file core ma li limiterebbe a 50.000 byte.
Hai un maggiore controllo dei file core in /proc/sys/kernel/
Ad esempio, puoi eliminare il tag su pid da
echo "0" > /proc/sys/kernel/core_uses_pid
I file core verranno semplicemente chiamati "core". Le persone fanno cose del genere in modo che un utente possa scegliere di inserire un file non scrivibile chiamato "core" nelle directory in cui non vogliono generare core dump. Potrebbe essere una directory (mkdir core) o un file (touch core; chmod 000 core).
Ma forse più interessante è che puoi fare:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
Tutti i corefile vengono quindi lanciati in /tmp/corefiles
(non cambiare core_uses_pid se lo fai).
Prova questo con un semplice script:
# script that dumps core
kill -s SIGSEGV $$
Sotto Ubuntu, la creazione di file core è controllata tramite il file /etc/default/collectd
. È possibile abilitare la creazione di core dump impostando:
ENABLE_COREFILES=1
Individuazione del file principale
Una volta che il daemon si è bloccato, verrà creato un file nella sua directory di lavoro corrente. Per impostazione predefinita, questo è pkglocalstatedir
, vale a dire prefix/var/lib/collectd
. Se hai installato un pacchetto, questa directory è molto probabilmente /var/lib/collectd
.
Fonti: AP Lawrence e IBM