Un fichier core est une image d'un processus qui est créé par le système d'exploitation lorsque le processus se termine de façon inattendue. Les fichiers de base sont créés lorsqu'un programme se comporte mal en raison d'un bogue ou d'une violation des mécanismes de protection du processeur ou de la mémoire. Le système d'exploitation tue le programme et crée le fichier principal.
Ce fichier peut être très utile pour déterminer ce qui n'a pas fonctionné avec un processus. La production des fichiers de base peut être activée par défaut, selon la distribution et la version de Linux que vous possédez.
Si vous ne voulez pas du tout de fichiers de base, définissez "ulimit -c 0" dans vos fichiers de démarrage. C'est la valeur par défaut sur de nombreux systèmes; en /etc/profile
vous pouvez trouver
Étant donné que les fichiers tronqués ne sont d'aucune utilité pratique, définissez la taille du fichier noyau Linux sur "illimité".
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
Le fichier principal est placé dans le répertoire de travail actuel du processus, sous réserve des autorisations d'écriture pour le processus JVM et de l'espace disque libre.
Selon le niveau du noyau, une option de noyau utile est disponible qui donne aux fichiers core des noms plus significatifs. En tant qu'utilisateur root, l'option sysctl -w kernel.core_users_pid = 1 garantit que les fichiers core ont un nom de la forme "Core.PID".
ulimit -S -c 0 > /dev/null 2>&1
Si vous voulez des fichiers de base, vous devez le réinitialiser dans votre propre .bash_profile:
ulimit -c 50000
autoriserait les fichiers principaux mais les limiterait à 50 000 octets.
Vous avez plus de contrôle sur les fichiers principaux dans /proc/sys/kernel/
Par exemple, vous pouvez éliminer le tag sur pid en
echo "0" > /proc/sys/kernel/core_uses_pid
Les fichiers core seront alors simplement nommés "core". Les gens font des choses comme ça pour qu'un utilisateur puisse choisir de placer un fichier non accessible en écriture nommé "core" dans des répertoires où il ne veut pas générer de vidages mémoire. Ce pourrait être un répertoire (mkdir core) ou un fichier (touch core; chmod 000 core).
Mais peut-être plus intéressant est que vous pouvez faire:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
Tous les corefiles sont ensuite lancés /tmp/corefiles
(ne changez pas core_uses_pid si vous faites cela).
Testez cela avec un script simple:
# script that dumps core
kill -s SIGSEGV $$
Sous Ubuntu, la création de fichiers principaux est contrôlée via le fichier /etc/default/collectd
. Vous pouvez activer la création de vidages mémoire en définissant:
ENABLE_COREFILES=1
Localisation du fichier principal
Une fois le démon tombé en panne, un fichier sera créé dans son répertoire de travail actuel. Par défaut, c'est-à pkglocalstatedir
-dire prefix/var/lib/collectd
. Si vous avez installé un package, ce répertoire est très probablement /var/lib/collectd
.
Sources: AP Lawrence et IBM