2011-01-27 7 views
11

Sto cercando un modo per selezionare le sezioni e le regioni di memoria incluse in un core dump.
Le dimensioni del dump di core della mia applicazione sono di circa 30 GB, la maggior parte è in buffer preallocati di cui non ho nemmeno bisogno nel debug (e può essere azzerato in seguito). Tuttavia, poiché il dump è così grande, ci vuole troppo tempo perché l'applicazione finisca di schiantarsi e iniziare il recupero.
Qualcuno può pensare a un modo per selezionare in anticipo quali segmenti saranno nel core dump?
GrazieDump nucleo selettivo in Linux: come posso selezionare le sezioni di dumping?

risposta

16

Secondo il core(5) pagina di manuale, è possibile impostare che mappature vengono scritti nel file core:

Dal kernel 2.6.23, il file /proc/PID/coredump_filter specifico per Linux può essere utilizzato per controllare quali segmenti di memoria vengono scritti nel file di dump di base in l'evento che un core dump è eseguito per il processo con l'ID processo corrispondente.

Il valore nel file è una maschera bit dei tipi di mappatura della memoria (vedere mmap (2)). Se nella maschera è impostato un bit, vengono scaricati i mapping di memoria del corrispondente tipo ; altrimenti sono non scaricati. I bit in questo file hanno il seguente significato:

 bit 0 Dump anonymous private mappings. 
     bit 1 Dump anonymous shared mappings. 
     bit 2 Dump file-backed private mappings. 
     bit 3 Dump file-backed shared mappings. 
     bit 4 (since Linux 2.6.24) 
       Dump ELF headers. 
     bit 5 (since Linux 2.6.28) 
       Dump private huge pages. 
     bit 6 (since Linux 2.6.28) 
       Dump shared huge pages. 

Per impostazione predefinita, sono impostati i seguenti bit: 0, 1, 4 (se le CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS opzione di configurazione del kernel è abilitata), e 5. La il valore di questo file è visualizzato in esadecimale. (Il valore di default viene quindi visualizzato come 33.) Le pagine di I/O mappate in memoria come il frame buffer non vengono mai scaricate e le pagine di DSO virtuali vengono sempre scaricate, indipendentemente dal valore di coredump_filter .

...

Questo file è fornito solo se il kernel è stato costruito con l'opzione di configurazione CONFIG_ELF_CORE.

+0

Grazie. Esattamente quello che stavo cercando. –

0

Non sono sicuro se è possibile impostare quale parte della memoria scaricare.

Da man 5 core

file su disco che contiene un'immagine della memoria del processo al momento della cessazione

Come opzione è possibile troncare file core utilizzando setrlimit con un parametro RLIMIT_CORE.

Problemi correlati