Unico inconveniente di dimensioni del core illimitate? Dove vanno i file core?


8

Ho un lavoro iniziale che occasionalmente si arresta in modo anomalo con un errore di segmentazione e ho alcune domande sui core dump.

Innanzitutto, dovrei aggiungere una stanza:

limit core unlimited unlimited

C'è un aspetto negativo nel consentire un numero illimitato di core? Un limite finito sarebbe migliore?

Secondo, dove andrà il file core? Se il valore predefinito non è un luogo standard o logico, come posso farlo apparire da qualche altra parte?


potresti aggiornarci con il tuo lavoro iniziale
Qasim,

Risposte:


6

I dump core illimitati non sono consigliabili nella maggior parte delle situazioni, ma tecnicamente vanno bene. Un dump core ha solo "tutta la memoria" del processo corrente. Quindi al massimo può essere grande quanto il tuo ram + swap. Spero che tu abbia più spazio libero di quello.

Nella vita reale dovrebbero essere "piccoli" rispetto al totale ram + swap.

Il file "dovrebbe" finire nella "directory corrente". Per le attività di avvio che non richiedono chdir di solito /. Se cambiano directory, allora fai da te per cacciarli. È tuttavia possibile codificare un percorso per loro.

Dovresti essere in grado di controllare /proc/sys/kernel/core_patternil "modello". Se imposti lo schema su qualcosa del genere, echo "/var/log/core" > /proc/sys/kernel/core_patterntutti i tuoi core dovrebbero finire in / var / log


5

Un file core è l'immagine di un processo che viene creato dal sistema operativo quando il processo termina in modo imprevisto. I file core vengono creati quando un programma si comporta in modo anomalo a causa di un bug o di una violazione della CPU o dei meccanismi di protezione della memoria. Il sistema operativo uccide il programma e crea il file principale.

Questo file può essere molto utile per determinare cosa è andato storto in un processo. La produzione di file core può essere abilitata per impostazione predefinita, a seconda della distribuzione e della versione di Linux che hai.

Se non vuoi affatto i file core, imposta "ulimit -c 0" nei tuoi file di avvio. Questo è il valore predefinito su molti sistemi; in /etc/profilete potresti trovare

Poiché i file troncati non sono di utilità pratica, impostare la dimensione del file core di Linux su "illimitato".

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

Il file principale viene inserito nella directory di lavoro corrente del processo, soggetto alle autorizzazioni di scrittura per il processo JVM e spazio libero su disco.

A seconda del livello del kernel, è disponibile un'utile opzione del kernel che fornisce ai corefile nomi più significativi. Come utente root, l'opzione sysctl -w kernel.core_users_pid = 1 assicura che i file core abbiano un nome nel formato "Core.PID".

ulimit -S -c 0 > /dev/null 2>&1

Se vuoi i file core, devi reimpostarli nel tuo .bash_profile:

ulimit -c 50000

consentirebbe i file core ma li limiterebbe a 50.000 byte.

Hai un maggiore controllo dei file core in /proc/sys/kernel/

Ad esempio, puoi eliminare il tag su pid da

echo "0" > /proc/sys/kernel/core_uses_pid 

I file core verranno semplicemente chiamati "core". Le persone fanno cose del genere in modo che un utente possa scegliere di inserire un file non scrivibile chiamato "core" nelle directory in cui non vogliono generare core dump. Potrebbe essere una directory (mkdir core) o un file (touch core; chmod 000 core).

Ma forse più interessante è che puoi fare:

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 

Tutti i corefile vengono quindi lanciati in /tmp/corefiles(non cambiare core_uses_pid se lo fai).

Prova questo con un semplice script:

# script that dumps core 
kill -s SIGSEGV $$ 

Sotto Ubuntu, la creazione di file core è controllata tramite il file /etc/default/collectd. È possibile abilitare la creazione di core dump impostando:

ENABLE_COREFILES=1

Individuazione del file principale

Una volta che il daemon si è bloccato, verrà creato un file nella sua directory di lavoro corrente. Per impostazione predefinita, questo è pkglocalstatedir, vale a dire prefix/var/lib/collectd. Se hai installato un pacchetto, questa directory è molto probabilmente /var/lib/collectd.

Fonti: AP Lawrence e IBM

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.