2010-05-04 15 views
7

Recientemente he notado un aumento en el tamaño de los volcados del núcleo generados por mi aplicación. Inicialmente, tenían solo alrededor de 5MB de tamaño y contenían alrededor de 5 estructuras de pila, y ahora tengo vertederos de núcleos de> 2GB y la información contenida en ellos no es diferente de los vertederos más pequeños.¡Los volcados de núcleo de Linux son demasiado grandes!

¿Hay alguna forma de que pueda controlar el tamaño de los volcados de núcleos generados? ¿No deberían ser al menos más pequeños que el binario de la aplicación en sí?

binarios se compilan de esta manera:

  • Compilado en modo de lanzamiento con depuración símbolos (es decir, opción del compilador -g en GCC).
  • Los símbolos de depuración se copian en un archivo separado
    y se eliminan del
    binario.
  • Se agrega un enlace de símbolos de depuración de GNU al binario.

Al comienzo de la aplicación, hay una llamada al setrlimit que establece el límite del núcleo al infinito: ¿es este el problema?

+1

Deje de alimentar a su aplicación burritos. – Pierreten

Respuesta

1

Sí, setrlimit es la razón por la que está obteniendo archivos de núcleo grandes. Puede establecer el límite en el tamaño del núcleo en la mayoría de las conchas, p. en bash puedes hacer ulimit -c 5000000. Sin embargo, su llamada setrlimit anulará eso.

/etc/security/limits.conf se puede utilizar para establecer límites superiores en el tamaño del núcleo también.

+2

Creo que esta respuesta es engañosa, setrlimit solo se asegurará de que el volcado del núcleo no sea más grande que el especificado al truncarlo. El volcado del núcleo tiene el tamaño debido a la memoria asignada o asignada por la aplicación. – Peter

11

Sí - no asignan tanta memoria :-)

El vaciado de memoria contiene la imagen completa del espacio de direcciones de la aplicación, incluyendo el código, pila y el montón (objetos malloc'd etc.)

Si sus volcados del núcleo son> 2GB, eso implica que en algún momento asignó esa cantidad de memoria.

Puede usar setrlimit para establecer un límite inferior en el tamaño del volcado del núcleo, a riesgo de terminar con un volcado del núcleo que no puede decodificar (porque está incompleto).

+2

Si la aplicación falla mientras tiene un archivo grande mapeado con 'mmap', también tendrá ese archivo incluido en su volcado. – caf

Cuestiones relacionadas