Kelemahan ukuran inti tidak terbatas? Kemana file inti pergi?

8

Saya memiliki pekerjaan pemula yang kadang-kadang crash dengan kesalahan segmentasi, dan saya punya beberapa pertanyaan tentang dump inti.

Pertama, saya harus menambahkan bait:

limit core unlimited unlimited

Apakah ada kerugian untuk memungkinkan ukuran inti tidak terbatas? Apakah batas yang terbatas akan lebih baik?

Kedua, kemana file inti akan pergi? Jika defaultnya bukan tempat standar atau logis, bagaimana saya membuatnya muncul di tempat lain?

brooks94
sumber
maukah Anda memperbarui kami dengan pekerjaan pemula Anda
Qasim

Jawaban:

6

Tempat pembuangan inti tidak terbatas tidak disarankan dalam kebanyakan situasi, tetapi secara teknis baik-baik saja. Core dump hanya memiliki "semua memori" yang dimiliki proses saat ini. Jadi paling-paling hanya bisa sebesar ram + swap Anda. Semoga Anda memiliki lebih banyak ruang kosong daripada itu.

Dalam kehidupan nyata mereka harus "kecil-ish" dibandingkan dengan total ram + swap.

File "harus" berakhir di "direktori saat ini". Untuk tugas pemula yang tidak chdir itu biasanya /. Jika mereka mengubah direktori maka Anda sendiri untuk memburu mereka. Namun Anda dapat membuat kode path untuk mereka.

Anda harus dapat memeriksa /proc/sys/kernel/core_pattern"pola". Jika Anda mengatur polanya menjadi seperti itu echo "/var/log/core" > /proc/sys/kernel/core_patternmaka semua inti Anda akan berakhir di / var / log

kapas
sumber
5

File inti adalah gambar dari suatu proses yang dibuat oleh sistem operasi ketika proses berakhir secara tak terduga. File-file inti dibuat ketika sebuah program melakukan kesalahan karena bug, atau pelanggaran terhadap CPU atau mekanisme perlindungan memori. Sistem operasi membunuh program dan membuat file inti.

File ini bisa sangat berguna dalam menentukan apa yang salah dengan suatu proses. Produksi file inti dapat diaktifkan secara default, tergantung pada distribusi dan versi Linux yang Anda miliki.

Jika Anda tidak ingin file inti sama sekali, setel "ulimit -c 0" di file permulaan Anda. Itu default pada banyak sistem; di dalam /etc/profilekamu dapat menemukan

Karena file terpotong tidak ada gunanya, atur ukuran file inti Linux menjadi "tidak terbatas".

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

File inti ditempatkan ke direktori proses saat ini, tunduk pada izin menulis untuk proses JVM dan ruang disk kosong.

Bergantung pada level kernel, opsi kernel yang berguna tersedia yang memberi corefiles nama yang lebih bermakna. Sebagai pengguna root, opsi sysctl -w kernel.core_users_pid = 1 memastikan bahwa file inti memiliki nama bentuk "Core.PID".

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

Jika Anda menginginkan file inti, Anda perlu meresetnya di .bash_profile Anda sendiri:

ulimit -c 50000

akan memungkinkan file inti tetapi batasi hingga 50.000 byte.

Anda memiliki kontrol lebih besar terhadap file inti di /proc/sys/kernel/

Misalnya, Anda dapat menghapus tag pada pid dengan

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

File inti kemudian akan dinamai "inti". Orang-orang melakukan hal-hal seperti itu sehingga pengguna dapat memilih untuk meletakkan file yang tidak bisa ditulis bernama "core" di direktori di mana mereka tidak ingin menghasilkan dump inti. Itu bisa berupa direktori (mkdir core) atau file (sentuh inti; chmod 000 inti).

Tapi mungkin yang lebih menarik yang bisa Anda lakukan:

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

Semua corefiles kemudian dilempar ke /tmp/corefiles(jangan mengubah core_uses_pid jika Anda melakukan ini).

Uji ini dengan skrip sederhana:

# script that dumps core 
kill -s SIGSEGV $$ 

Di bawah Ubuntu, pembuatan file inti dikendalikan melalui file /etc/default/collectd. Anda dapat mengaktifkan pembuatan dump inti dengan menetapkan:

ENABLE_COREFILES=1

Menemukan file inti

Setelah daemon macet, sebuah file akan dibuat di direktori kerjanya saat ini. Secara default, ini pkglocalstatedir, yaitu prefix/var/lib/collectd. Jika Anda menginstal paket, kemungkinan besar direktori ini /var/lib/collectd.

Sumber: AP Lawrence, dan IBM

Mitch
sumber