¿Desventaja de tamaño de núcleo ilimitado? ¿A dónde van los archivos principales?

8

Tengo un trabajo inicial que ocasionalmente se bloquea con una falla de segmentación, y tengo algunas preguntas sobre los volcados del núcleo.

Primero, debo agregar una estrofa:

limit core unlimited unlimited

¿Existe un inconveniente para permitir tamaños de núcleo ilimitados? ¿Sería mejor un límite finito?

Segundo, ¿a dónde irá el archivo central? Si el valor predeterminado no es un lugar estándar o lógico, ¿cómo hago para que aparezca en otro lugar?

brooks94
fuente

Respuestas:

6

Los volcados de núcleo ilimitados no son recomendables en la mayoría de las situaciones, pero son técnicamente buenos. Un volcado de núcleo solo tiene "toda la memoria" que tiene el proceso actual. Entonces, a lo sumo, solo puede ser tan grande como su ram + swap. Espero que tengas más espacio libre que eso.

En la vida real deberían ser "pequeños" en comparación con el total de ram + swap.

El archivo "debería" terminar en "el directorio actual". Para tareas iniciales que no son chdir, eso suele ser /. Si cambian de directorio, entonces estás solo para cazarlos. Sin embargo, puede codificar una ruta para ellos.

Debería poder comprobar /proc/sys/kernel/core_patternel "patrón". Si configura el patrón en algo así echo "/var/log/core" > /proc/sys/kernel/core_pattern, todos sus núcleos deberían terminar en / var / log

coteyr
fuente
5

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/profileusted 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

Mitch
fuente