2010-05-04 6 views
7

Recentemente ho notato un aumento delle dimensioni dei dump core generati dalla mia applicazione. Inizialmente, avevano dimensioni di circa 5 MB e contenevano circa 5 frame di stack, e ora ho core dump di> 2 GB e le informazioni contenute al loro interno non sono diverse dalle discariche più piccole.I core core di Linux sono troppo grandi!

Esiste un modo per controllare la dimensione dei core dump generati? Non dovrebbero essere almeno più piccoli del binario dell'applicazione stesso?

binari sono compilati in questo modo:

  • compilato in modalità di rilascio con il debug simboli (ad esempio, l'opzione del compilatore -g in GCC).
  • I simboli di debug vengono copiati su un file separato e svuotati dal binario
    .
  • Un collegamento di simboli di debug GNU è stato aggiunto al file binario.

All'inizio dell'applicazione, c'è una chiamata a setrlimit che imposta il limite di nucleo su infinito - È questo il problema?

+1

Interrompi l'alimentazione dei tuoi burritos app. – Pierreten

risposta

1

Sì, setrlimit è il motivo per cui si ottengono file di grandi dimensioni. Puoi impostare il limite sulle dimensioni del core nella maggior parte delle shell, ad es. in bash puoi fare ulimit -c 5000000. La tua chiamata setrlimit sostituirà quella, comunque.

/etc/security/limits.conf può essere utilizzato per impostare limiti superiori anche sulle dimensioni del core.

+2

Penso che questa risposta sia fuorviante, setrlimit si limiterà a verificare che il core dump non sia più grande di quanto specificato troncandolo. Il core dump è la dimensione che è dovuta alla memoria che l'applicazione ha allocato o mappato. – Peter

11

Sì - non si alloca la memoria così tanto :-)

Il core dump contiene l'immagine completa di spazio di indirizzi dell'applicazione, compreso il codice, stack e heap (oggetti malloc'd etc.)

Se i core dump sono> 2 GB, ciò implica che a un certo punto è stata allocata quella quantità di memoria.

È possibile utilizzare setrlimit per impostare un limite inferiore per la dimensione del dump principale, con il rischio di finire con un core dump che non è possibile decodificare (perché è incompleto).

+2

Se l'app si arresta in modo anomalo mentre ha un file di grandi dimensioni mappato con 'mmap', anche questo file verrà incluso nel dump. – caf