Unix'te (veya Linux'ta) devam eden bir çekirdek dökümü durdurma mekanizması var mı?


15

Diyelim ki (çok) büyük bir süreç çekirdeği çökertiyor ve çekiyor ve diğer bilgilerin nedenini biliyoruz (muhtemelen bir iddia mesajı, belki başka bir şey).

Çekirdek çöplüğünün tamamen üretilmesini durdurmanın bir yolu var mı, çünkü bu durumda bir atık mı?

Örneğin, çekirdek dökümü işleminin -9'unu öldürmek çekirdek dosya üretimini kesintiye uğratır mı?

Açıkçası, çekirdek dökümü istemediğimizi önceden biliyorsak, ulimit'i uygun şekilde ayarlayabilir veya işletim sisteminin çeşitli çekirdek dosya kontrol yardımcı programlarını kullanabiliriz.

Ancak bu soru "zaten devam eden çekirdek dökümü" aşamasıyla ilgili ...

(Örneğin, /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit'te istekte olduğumu ve 5 harcamak istemediğinizi düşünün -6 TB disk alanı :))


Linux'ta çekirdek dökümü oluşturulmasını devre dışı bırakabilirsiniz ... bir seçenek olabilir mi?
krisFR

Hayır - çekirdek dökümü genel olarak gereklidir, ancak zaman / disk alanı / vb. Kazanmak için, çekirdeğe ihtiyaç duymadan sorunun ne olduğunu bildiğimiz durumlarda onları durdurmanın bir yolunu arıyoruz. Tabii ki, dökümü bittikten sonra çekirdeği silebiliriz (hatta ondan önce bağlantısını kesebiliriz), ancak daha önce çekirdek dökümü daha önce öldürebilirsek, diskteki birkaç gig'i bağlamak için bir neden yoktur.
Mike G.

Belirli bir koşul gerçekleştiğinde programı çağıran kodda "cat / dev / null> <path_to_core>" kullanabilirsiniz, / proc / <pid> girdisi var olduğu sürece, birkaç saniyede bir uyuyun ve çekirdek dosyaya dev / null kopya. Bu sıfırlayacaktır. Sorunun tam bağlamından emin değilim, ama bu işe yarayabilir.
Schrute

Schrute, çekirdeğin bağlantısını kaldırmakla aynı etkiye sahip olurdu, değil mi? Disk alanı ve sistem kaynakları, çekirdek yazmayı bitirene kadar kullanılmaya devam eder - dosya boyutu du veya ls'de görünmez.
Mike G.

Kaynaklar evet, ancak bu, çekirdek / günlük dosyası gibi büyük bir dosyayla başa çıkmak ve PID'yi durdurmamak için yaygın bir yöntemdir. Sadece amacın ne olduğuna bağlı.
Schrute

Yanıtlar:


8

Genellikle: hayır, bir coredump'ı güvenilir bir şekilde öldürmenin bir yolu yoktur.

Ticari * NIX için bir olasılık (en azından linux) olduğu söyleniyor

Olasılık, çekirdeğin 3.x serisinin dosya yazımını kesebilmesidir. Bir olasılık, boşaltma işlemini yapan ipliği bulmak ve SIGKILL'i başarılı olana kadar tekrar tekrar göndermektir.

Bu yama serisi sorunu belirli bir düzeye getirir.

Diğer olasılık, coredump_pattern için alternatif sözdizimini kullanmaktır. Kılavuz, bir desen yerine 2.6.19'dan beri, çöplüğü idare edecek bir boru ve bir program (params ile) kullanabileceğinizi söylüyor. Ergo, hangi çöplüğün nereye yazılacağını kontrol edeceksiniz (/ dev / null yararsız çekirdekleriniz için açık bir adaydır).

Bu yama da biraz dikkat edilmeyi hak ediyor: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html


Teşekkürler zeridon - bu şimdiye kadar kesinlikle en iyi cevap.
Mike G.

Boru mekanizmasını kullanırsanız, saklamak istediğiniz bir şey olmadığını biliyorsanız (boruların kırılması başka bir sorun yaratmazsa ... bunu test etmeniz gerekir) boru verilerini okumadan bırakabileceğinizi düşünürdüm.
Alexis Wilke


-1

Çekirdek döküm boyutunu sınırlamak için ulimit -c (bash kullandığınızı varsayarak) çalıştırabilirsiniz.

Bkz. Https://askubuntu.com/questions/220905/how-to-remove-limit-on-core-dump-file-size

ve

http://ss64.com/bash/ulimit.html


1
Kerry, OP'de söylediğim gibi, "Açıkçası, çekirdek dökümü istemediğimizi önceden biliyorsak, ulimit'i uygun şekilde ayarlayabilir veya işletim sisteminin çeşitli çekirdek dosya kontrol yardımcı programlarını kullanabiliriz." Çok büyük bir görev için (zaman / disk alanından / kaynaklarından tasarruf etmek için) zaten başladıktan sonra bir çekirdek dökümü durdurmanın bir yolu olup olmadığını görmeye çalışıyorum.
Mike G.
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.