¿Cómo establecer la ubicación del archivo de volcado de núcleo (y el nombre)?

17

Estoy en CentOS 6, intentando habilitar los volcados de núcleo para una aplicación que estoy desarrollando. He puesto:

ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null

en mi perfil de bash, pero todavía no se generó un volcado de núcleo (en una nueva terminal).

También he cambiado mi /etc/security/limits.conf para que los límites flexibles sean cero para todos los usuarios.

¿Cómo configuro la ubicación de los archivos principales para la salida? ¿Quería especificar la ubicación y agregar la hora en que se generó el volcado, como parte del nombre del archivo?

usuario997112
fuente
1
Esto puede ser útil: stackoverflow.com/a/16048288/2808351
dhag el
stackoverflow.com/questions/2065912/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

27

Para configurar la ubicación de los volcados del núcleo en CentOS 6, puede editar /etc/sysctl.conf. Por ejemplo, si desea volcados de núcleo en /var/crash:

kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t

Donde las variables son:

% e es el nombre de archivo
% g es el gid bajo el cual se ejecutaba el proceso
% p es el pid del proceso
% s es la señal que causó el volcado
% t es el momento en que ocurrió el volcado
% u es el uid bajo el cual se estaba ejecutando el proceso

También tienes que agregar /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'

Ahora aplique nuevos cambios:

$ sysctl -p

Pero hay una advertencia de esta manera. Si el parámetro kernel kernel.core_pattern siempre se restablece y se sobrescribe al reiniciar a la siguiente configuración, incluso cuando un valor se especifica manualmente en /etc/sysctl.conf:

|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e

En resumen, cuando se abrtd.serviceinicia kernel.core_patternse sobrescribe automáticamente por el sistema instalado abrt-addon-ccpp. Hay dos formas de resolver esto:

  1. Configuración de DumpLocationopción en el /etc/abrt/abrt.confarchivo de configuración. El directorio de destino se puede especificar estableciendo DumpLocation = /var/crashen el /etc/abrt/abrt.confarchivo de configuración, y sysctl kernel.core_patternel valor que se muestra es el mismo, pero en realidad el archivo principal se creará en el directorio debajo /var/crash.

    Además, si tiene SELinux habilitado, debe ejecutar:

    $ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?"  
    $ setsebool -P abrt_anon_write 1
    

    Y finalmente reiniciar abrtd.service:

    $ service abrtd.service restart
    
  2. Detenga el servicio abrtd. kernel.core_patternno se sobrescribirá - (Nunca lo he probado).

taliezin
fuente
1
Impresionante respuesta. Vale la pena señalar que en los sistemas EFI también obtiene un volcado en la memoria flash del sistema.
mikeserv
0

Para generar un volcado de núcleo en Busybox, podemos agregar los siguientes parámetros en el script de inicialización que ejecuta nuestro ejecutable. Por lo tanto, cada vez que inicializamos el software y exportamos variables de entorno, podemos copiar las líneas a continuación al script también para volcar el núcleo en caso de que veamos algún bloqueo.

Para establecer la ubicación de los volcados del núcleo en Busybox, puede establecer la ruta del archivo del núcleo utilizando el sistema de archivos proc. Por ejemplo, si desea volcados de núcleo en /tmp/crash/corefiles:

mkdir -p /tmp/crash/corefiles
chmod 775 /tmp/crash/corefiles
echo "/tmp/crash/corefiles/%e.%s.core" > /proc/sys/kernel/core_pattern

Donde las variables son:

% e es el nombre de archivo
% g es el gid bajo el cual se ejecutaba el proceso
% p es el pid del proceso
% s es la señal que causó el volcado
% t es el momento en que ocurrió el volcado
% u es el uid bajo el cual se estaba ejecutando el proceso

Además, debe establecer el tamaño del archivo central, el siguiente comando establece el tamaño del archivo central en ilimitado

ulimit -c unlimited

Ahora, para verificar el tamaño del archivo central establecido para cada subproceso dentro de un proceso, podemos verificar usando

cat /proc/<PID>/limits

La salida del comando anterior:

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        unlimited            unlimited            bytes     
Max open files            10000                10000                files     
Max address space         unlimited            unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             31868                31868                processes 
Max locked memory         65536                65536                bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       31868                31868                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us      

Como podemos ver en la salida anterior, el tamaño máximo del archivo central está establecido en ilimitado.

Para obtener más información, visite este enlace. Técnicas de depuración de aplicaciones de Linux / archivos principales

Ankit Raj
fuente