Çekirdek döküm dosyasının konumunu (ve adını) nasıl ayarlayabilirim?


17

Geliştirdiğim bir uygulama için çekirdek dökümlerini etkinleştirmeye çalışıyorum CentOS 6'dayım. Koydum:

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

benim bash profilime, ama hala bir çekirdek dökümü (yeni bir terminalde) üretmedi.

Ayrıca yumuşak sınırların tüm kullanıcılar için sıfır olması için /etc/security/limits.conf dosyamı da değiştirdim.

Çıktılacak çekirdek dosyaların konumunu nasıl ayarlarım? Konumu belirtmek ve dosya adının bir parçası olarak dökümün oluşturulduğu zamanı eklemek istedim?


1
Bu yardımcı olabilir: stackoverflow.com/a/16048288/2808351
dhag

Yanıtlar:


27

CentOS 6'da çekirdek dökümlerinin konumunu ayarlamak için düzenleyebilirsiniz /etc/sysctl.conf. Örneğin, çekirdek dökümü yapmak istiyorsanız /var/crash:

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

Değişkenler:

% e dosya adı
% g , işlemin
% p altında çalıştığı gid, % s işlemin pid'i
% s , dökümü oluşturan sinyaldir
% t , dökümün gerçekleştiği zamandır
% u işlemin altında çalıştığı uid

Ayrıca eklemek zorunda /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'

Şimdi yeni değişiklikler uygulayın:

$ sysctl -p

Ama bu şekilde bir uyarı beyazı var. Kernel.core_pattern kernel parametresi her zaman sıfırlanır ve aşağıdaki yapılandırmada manuel olarak bir değer belirtilse bile aşağıdaki yapılandırmanın üzerine yazılırsa /etc/sysctl.conf:

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

Kısacası, abrtd.servicebaşlatılan kernel.core_patternsistem tarafından başlatmaların üzerine otomatik olarak yazılır abrt-addon-ccpp. Bunu çözmenin iki yolu vardır:

  1. Yapılandırma dosyasındaki ayar DumpLocationseçeneği /etc/abrt/abrt.conf. Hedef dizin /var/crash, /etc/abrt/abrt.confyapılandırma dosyasında DumpLocation = ayarlanarak belirtilebilir ve sysctl kernel.core_patterngörüntülenen değeri aynıdır, ancak aslında çekirdek dosya altındaki dizine oluşturulur /var/crash.

    Ayrıca SELinux'u etkinleştirdiyseniz şunları çalıştırmanız gerekir:

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

    Ve son olarak yeniden başlatın abrtd.service:

    $ service abrtd.service restart
    
  2. Ani hizmeti durdurun. kernel.core_patternüzerine yazılmaz. - (Hiç test etmedim).


1
Müthiş cevap. EFI sistemlerinde ayrıca sistem flaşında bir döküm olduğunu da belirtmek gerekir.
mikeserv

0

Busybox'ta çekirdek dökümü oluşturmak için çalıştırılabilir komut dosyamızı çalıştıran başlatma komut dosyasına aşağıdaki parametreleri ekleyebiliriz. Bu nedenle, yazılım ve ortam değişkenlerini her başlattığımızda, herhangi bir çökme durumunda, çekirdeği dökmek için aşağıdaki satırları da betiğe kopyalayabiliriz.

Busybox'ta çekirdek dökümlerinin konumunu ayarlamak için proc dosya sistemini kullanarak çekirdek dosya yolunu ayarlayabilirsiniz. Örneğin, çekirdek dökümlerini almak istiyorsanız /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

Değişkenler:

% e dosya adı
% g , işlemin
% p altında çalıştığı gid, % s işlemin pid'i
% s , dökümü oluşturan sinyaldir
% t , dökümün gerçekleştiği zamandır
% u işlemin altında çalıştığı uid

Ayrıca, çekirdek dosya boyutunu ayarlamanız gerekir, aşağıdaki komut çekirdek dosya boyutunu sınırsız olarak ayarlar

ulimit -c unlimited

Şimdi bir işlemdeki her iş parçacığı için ayarlanan çekirdek dosya boyutunu kontrol etmek için şunu kullanarak kontrol edebiliriz:

cat /proc/<PID>/limits

Yukarıdaki komutun çıktısı:

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      

Yukarıdaki çıktıdan da görebileceğimiz gibi maksimum çekirdek dosya boyutu sınırsız olarak ayarlanmıştır.

Daha fazla bilgi için lütfen bu bağlantıyı ziyaret edin. Linux Uygulamaları Hata Ayıklama Teknikleri / Temel dosyalar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.