Bu kadar çok apt-check çalışmasını nasıl önleyebilirim?


18

Çok açık bir nedenden dolayı çökmüş bir Ubuntu 12.04 sunucum var: 30+ apt-checktüm belleği tüketen süreçler, OOM katili, hayati hizmetleri öldürüyor. apt-checkİşlemlerin nereden geldiğinden emin değilim , ancak Nagios / Icinga eklentilerim check_aptbunu kullanabilir ve byobudurum satırı çıktısını görüntülemek isteyebilir. Sanırım bir şey kilitlendi ve tüm süreçler sadece bekliyordu, ama hafıza tutuyordu.

apt-checkSistemde bu kadar çok vakanın olmasını nasıl önleyebilirim ? Bana mantıklı değil ve sadece dpkg veritabanında bir okuma kilidi alamaz en kısa sürede bırakmak gerekir.

Görünüşe göre burada belada olan tek kişi ben değilim. İçin tüm öneriler apt-checkoldukça olumsuz:

resim açıklamasını buraya girin

(temiz tarayıcı, giriş yapılmadı, kişiselleştirilmiş arama yok)

Yanıtlar:


8

Bazı dalışlar apt-checkbana bu ipuçlarını düzeltilmesi gereken çok künt bir senaryo olduğu için verdi. Yazarlarına tüm saygımla, sunucularımda başarısız oluyor. İşte düşüncelerim:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • nikelevel 19'u kendisi için zorlar
  • eylemlerde zaman aşımı ayarlanmadı

Son ikisinin kombinasyonu, sonsuz bir şekilde bir spiral içinde aşağı doğru yığılmasına izin verir. Sistem daha yüksek önceliğe sahip başka amaçlar için kullanılırsa, işlemlerin miktarı artacaktır ve bunun apt-checküzerinde hiçbir öncelik olmayacağından bunun sonu yoktur . Sorun ancak OOM katili hayati sistem süreçlerinizi öldürmeye karar verdiğinde daha da kötüleşecektir.

Davranıştaki bu iki durumdan herhangi biri farklı olsaydı, sistemin böylesine kırık bir duruma gelmesine izin vermezdi benim varsayımım.

Dizeler de bu konuda sorumlu üst süreçler hakkında doğru olsa da, aşağıdaki noktaların kusurları olduğuna apt-checkve doğru şekilde ele alınabilmesi için bir hata olarak bildirilmesi gerektiğine inanıyorum :

  • önce OOM katilinin kendisini öldürmesi için ipucu vermeli
  • Nikeleveli sabit kodlamamalıdır
  • bilgi almak mantıksız bir zaman alırsa çıkmalıdır

Aslında, Linux OOM katili bu konuda biraz sezgisel yapıyor gibi görünüyor. Niced süreçleri daha yüksek bir puan alacak ve uzun süren süreçler azaltılacaktır. ( kaynak - Ulrich Dangel'e işaret ettiği için teşekkürler )

Önerebileceğim olası çözüm:

  • işlendikten sonra önbellek sonuçları
  • Her basit (çift ) çağrı için tüm Python-APT kitaplıklarını yüklemeden N saniyeden azsa önbelleği çıktılar .--help
  • nicelevel'i yapılandırılabilir yap - Bunu değiştirmeme / devre dışı bırakmama izin ver, lütfen! 0 olarak ayarlamanın gerçekten yardımcı olacağına inanıyorum
  • OOM katil skorunu artırsın mı

Sanırım yapması gereken en büyük şeyi kaçırdınız: bir lockfile kullanın ve aynı anda birden fazla örneğin çalışmasına izin vermeyin.
derobert

@derobert Ubuntu'da belirli ayrıcalıklar olmadan, herhangi bir kullanıcının çalıştırabileceği bir betik değil. Ya da bu okunabilir / yazılabilir kilit dosyasını /var/run/ /tmpiçin güvenle kullanabilir miyim? Orada büyük delik: kilit dosyası ekleyin ve yönetici sistem güncellemelerinden haberdar edilmeyecek!
gertvdijk

Otomatik olarak başlatan her şey (30'dan fazla kopyaya neden olur) kilitleme işlemini gerçekleştirmelidir. Veya bunu kullanıcı başına yapabilir. Her iki durumda da, çözülmesi gereken bir hata.
derobert

Nagios / Icinga tuzaklardan kaçıyor gibi görünüyor. En azından, 10 saniyelik bir zaman aşımı vardı ve aşılırsa uyarıldı. (Zaman aşımını nasıl yapılandıracağımı bilmememe rağmen - daha uzun süre tercih ederim). Debian'da Byobu benim için soruna neden olan şeydi; Ubuntu'da düzeltilmesi gerekiyordu .
sourcejedi

4

Hangi sürecin uygun bir kontrol ürettiğini bulmanız gerekir. işlem ağacını almak için ps gibi bir şey kullanabilirsiniz.

ps -A --forest

Eğer apt-check'in ebeveynleri yoksa, o zaman belirli bir program değil, apt-check kendi kendine bir sorun olabilir. bu durumda apt-check hata ayıklama çalışacağım.


Teşekkürler. Bana daha fazla bakmam için bazı fikirler verdi. Ancak bu beni apt-checkgerçekten bir sorun olduğuna inandırıyor - kendi cevabımı gör .
gertvdijk

Bellek ve CPU zamanı tüketiyorsa, bir zombi değildir.
Gilles 'SO- kötü olmayı bırak'

@Gilles iyi bir nokta.
dizeleri

0

Ubuntu 12.04 üzerinde yazılı temel

Aynı sorunu yaşıyorum ve bunun nedeni byobu, eğer sadece apt-get updatekullanmıyorsam byobu, hiçbir check-aptişlem olmayacağı için öğrendim . Ayrıca, ilgilidir update-notifierkullanarak, I (update-bildirimde bulunan-ortak, update-notifier) o paketleri kaldırıldı zaman, paketlemek byobuve çalıştırın apt-get update, başka bir komut koştu ama oldukça aynı bellek kullanarak: apt-get -s -o Debug::NoLocking=true upgrade.

Başka şeyler de çalışabilir apt-get update(ama muhtemelen çalışmaz check-apt)

Masaüstünde daha fazla şey olabilir.

Sonuç: Bu işlemleri byobuçalıştırıp apt-get updatetetiklediğinizde olayı yakalar, bunu düzeltmek check-aptiçin durum çubuğunu yeniden yapılandırın byobu.

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.