Bagaimana cara mengatur lokasi file dump inti (dan nama)?

17

Saya menggunakan CentOS 6, mencoba mengaktifkan core dump untuk aplikasi yang saya kembangkan. Saya telah menempatkan:

ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null

ke profil bash saya, tetapi dump inti masih tidak menghasilkan (di terminal baru).

Saya juga telah mengubah /etc/security/limits.conf saya sehingga batas lunaknya nol untuk semua pengguna.

Bagaimana cara mengatur lokasi file inti menjadi output? Saya ingin menentukan lokasi dan menambahkan waktu dump dihasilkan, sebagai bagian dari nama file?

pengguna997112
sumber
1
Ini mungkin membantu: stackoverflow.com/a/16048288/2808351
dhag
stackoverflow.com/questions/2065912/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

27

Untuk mengatur lokasi dump inti di CentOS 6 Anda dapat mengedit /etc/sysctl.conf. Misalnya jika Anda ingin dump inti di /var/crash:

kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t

Di mana variabelnya adalah:

% e adalah nama file
% g adalah gid proses berjalan di bawah
% p adalah pid dari proses
% s adalah sinyal yang menyebabkan dump
% t adalah saat dump terjadi
% u adalah uid proses berjalan di bawah

Anda juga harus menambahkan /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'

Sekarang terapkan perubahan baru:

$ sysctl -p

Tapi ada peringatan sedikit pun dengan cara ini. Jika parameter kernel, kernel.core_pattern selalu diatur ulang dan ditimpa saat reboot ke konfigurasi berikut bahkan ketika nilai ditentukan secara manual di /etc/sysctl.conf:

|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e

Singkatnya ketika abrtd.servicemulai kernel.core_patternditimpa secara otomatis oleh sistem yang diinstal abrt-addon-ccpp. Ada dua cara untuk menyelesaikan ini:

  1. DumpLocationOpsi pengaturan dalam /etc/abrt/abrt.conffile konfigurasi. Direktori tujuan dapat ditentukan dengan menetapkan DumpLocation = /var/crashdalam /etc/abrt/abrt.conffile konfigurasi, dan sysctl kernel.core_patternnilai yang ditampilkan adalah sama tetapi sebenarnya file inti akan dibuat ke direktori di bawah /var/crash.

    Jika SELinux diaktifkan, Anda harus menjalankan:

    $ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?"  
    $ setsebool -P abrt_anon_write 1
    

    Dan akhirnya restart abrtd.service:

    $ service abrtd.service restart
    
  2. Hentikan layanan abrtd. kernel.core_patterntidak akan ditimpa. - (Saya belum pernah menguji).

taliezin
sumber
1
Jawaban yang luar biasa. Mungkin perlu dicatat bahwa pada sistem EFI Anda juga mendapatkan dump di flash sistem.
mikeserv
0

Untuk menghasilkan dump inti pada Busybox kita dapat menambahkan parameter di bawah ini di inisialisasi skrip yang menjalankan executable kami. Jadi setiap kali kita menginisialisasi perangkat lunak dan variabel lingkungan ekspor kita dapat menyalin baris di bawah ini ke skrip juga untuk membuang inti jika kita melihat ada kerusakan.

Untuk mengatur lokasi dump inti di Busybox Anda dapat mengatur path file inti menggunakan sistem file proc. Misalnya, jika Anda ingin dump inti di /tmp/crash/corefiles:

mkdir -p /tmp/crash/corefiles
chmod 775 /tmp/crash/corefiles
echo "/tmp/crash/corefiles/%e.%s.core" > /proc/sys/kernel/core_pattern

Di mana variabelnya adalah:

% e adalah nama file
% g adalah gid proses berjalan di bawah
% p adalah pid dari proses
% s adalah sinyal yang menyebabkan dump
% t adalah saat dump terjadi
% u adalah uid proses berjalan di bawah

Anda juga harus mengatur ukuran file inti, di bawah ini perintah menetapkan ukuran file inti menjadi tidak terbatas

ulimit -c unlimited

Sekarang untuk memeriksa ukuran file inti yang ditetapkan untuk setiap utas dalam suatu proses yang dapat kita periksa menggunakan

cat /proc/<PID>/limits

Output dari perintah di atas:

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        unlimited            unlimited            bytes     
Max open files            10000                10000                files     
Max address space         unlimited            unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             31868                31868                processes 
Max locked memory         65536                65536                bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       31868                31868                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us      

Seperti yang dapat kita lihat dari output di atas ukuran file max core diatur ke tidak terbatas.

Untuk info lebih lanjut silakan kunjungi tautan ini. Aplikasi Linux Teknik Debugging / file Inti

Ankit Raj
sumber