Un archivo central es una imagen de un proceso creado por el sistema operativo cuando el proceso finaliza inesperadamente. Los archivos principales se crean cuando un programa se comporta mal debido a un error o una violación de los mecanismos de protección de la CPU o la memoria. El sistema operativo mata el programa y crea el archivo central.
Este archivo puede ser muy útil para determinar qué salió mal con un proceso. La producción de archivos principales se puede habilitar de manera predeterminada, dependiendo de la distribución y versión de Linux que tenga.
Si no desea ningún archivo principal, configure "ulimit -c 0" en sus archivos de inicio. Ese es el valor predeterminado en muchos sistemas; en /etc/profile
usted puede encontrar
Debido a que los archivos truncados no tienen un uso práctico, establezca el tamaño del archivo central de Linux en "ilimitado".
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
El archivo central se coloca en el directorio de trabajo actual del proceso, sujeto a permisos de escritura para el proceso JVM y espacio libre en disco.
Dependiendo del nivel de kernel, hay disponible una opción útil de kernel que le da a los corefiles nombres más significativos. Como usuario root, la opción sysctl -w kernel.core_users_pid = 1 asegura que los archivos principales tengan un nombre con la forma "Core.PID".
ulimit -S -c 0 > /dev/null 2>&1
Si desea archivos centrales, debe restablecerlos en su propio .bash_profile:
ulimit -c 50000
permitiría archivos principales pero los limitaría a 50,000 bytes.
Tienes más control de los archivos principales en /proc/sys/kernel/
Por ejemplo, puede eliminar el etiquetado en pid por
echo "0" > /proc/sys/kernel/core_uses_pid
Los archivos principales solo se denominarán "núcleo". La gente hace cosas así para que un usuario pueda optar por colocar un archivo no editable llamado "núcleo" en directorios donde no desea generar volcados de núcleo. Eso podría ser un directorio (mkdir core) o un archivo (touch core; chmod 000 core).
Pero quizás lo más interesante es que puedes hacer:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
Todos los archivos core se envían a /tmp/corefiles
(no cambies core_uses_pid si haces esto).
Prueba esto con un script simple:
# script that dumps core
kill -s SIGSEGV $$
En Ubuntu, la creación de archivos principales se controla a través del archivo /etc/default/collectd
. Puede habilitar la creación de volcados de núcleo configurando:
ENABLE_COREFILES=1
Ubicando el archivo central
Una vez que el daemon se bloqueó, se creará un archivo en su directorio de trabajo actual. Por defecto, esto es pkglocalstatedir
, es decir prefix/var/lib/collectd
. Si instaló un paquete, este directorio es muy probable /var/lib/collectd
.
Fuentes: AP Lawrence e IBM