Wie kann man verhindern, dass so viele Instanzen von apt-check ausgeführt werden?

18

Ich habe einen Ubuntu 12.04-Server, der gerade aus einem sehr offensichtlichen Grund abgestürzt ist: Über 30 apt-checkProzesse verbrauchen den gesamten Speicher. Ich bin mir nicht sicher, woher die apt-checkProzesse kommen, aber ich vermute, dass meine Nagios / Icinga-Plugins check_aptsie verwenden und dass die byobuStatuszeile möglicherweise die Ausgabe anzeigen soll. Ich vermute, etwas ist blockiert und alle Prozesse haben nur gewartet, aber die Erinnerung ist geblieben.

Wie kann ich verhindern, dass so viele Instanzen apt-checkauf dem System vorhanden sind? Es macht für mich keinen Sinn und sollte einfach beendet werden, sobald es keine Lesesperre für die dpkg-Datenbank gibt.

Es scheint, dass ich nicht der einzige bin, der hier in Schwierigkeiten gerät. Alle Vorschläge für apt-checksind ziemlich negativ:

Bildbeschreibung hier eingeben

(sauberer Browser, nicht eingeloggt, keine personalisierte Suche)

gertvdijk
quelle

Antworten:

8

Einige Eintauchversuche apt-checkgaben mir diese Hinweise, weil es sich um ein sehr klares Skript handelt, das repariert werden muss. Bei allem Respekt vor den Autoren scheitert es auf meinen Servern. Hier sind meine Gedanken:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • zwingt sich nicelevel 19
  • Für Aktionen wurden keine Zeitlimits festgelegt

Die Kombination der letzten beiden erlaubt es, sich endlos spiralförmig nach unten zu stapeln. Wenn das System für andere Zwecke mit höherer Priorität verwendet wird, nimmt die Anzahl der Prozesse nur zu und es gibt kein Ende, da apt-checkes niemals eine höhere Priorität erhält. Probleme werden erst schlimmer, wenn der OOM-Killer entscheidet, Ihre lebenswichtigen Systemprozesse zu beenden.

Wenn einer dieser beiden Verhaltensaspekte unterschiedlich wäre, würde es dem System nicht ermöglichen, in einem derart defekten Zustand zu enden, so gehe ich davon aus.

Auch wenn Strings Recht haben, dass die übergeordneten Prozesse auch dafür verantwortlich sind, glaube ich, dass die folgenden Punkte Fehler sind apt-checkund als Fehler gemeldet werden müssen, um richtig angesprochen zu werden:

  • es sollte den OOM-Mörder anregen , sich zuerst töten zu lassen
  • es sollte nicht die schönste fest codierte Ebene einstellen
  • Es sollte beendet werden, wenn es unangemessen lange dauert, Informationen abzurufen

Tatsächlich scheint der Linux-OOM-Killer diesbezüglich eine Heuristik zu betreiben. Gekennzeichnete Prozesse erhalten eine höhere Punktzahl, und lang laufende Prozesse werden verringert. ( Quelle - Danke an Ulrich Dangel für den Hinweis )

Mögliche Lösung, die ich vorschlagen kann:

  • Cache-Ergebnisse nach der Verarbeitung
  • Ausgabecache bei weniger als N Sekunden ohne Laden aller Python-APT-Bibliotheken für jeden einfachen (geraden --help) Aufruf.
  • mach den Nicelevel konfigurierbar - Erlaube mir dies zu ändern / deaktivieren, bitte! Ich glaube, dass es tatsächlich helfen wird, es auf 0 zu setzen
  • Lass es die OOM-Killer-Punktzahl erhöhen
gertvdijk
quelle
Ich denke, Sie haben das größte Problem übersehen: Verwenden Sie eine Sperrdatei und lassen Sie nicht zu, dass mehrere Instanzen gleichzeitig ausgeführt werden.
Derobert
@derobert Es ist ein Skript, das jeder Benutzer ohne bestimmte Berechtigungen unter Ubuntu ausführen kann, kein Dämon. Oder kann ich /var/run/ /tmpfür diese weltweit lesbare / beschreibbare Sperrdatei sicher verwenden? Große Lücke dort: Lock-Datei hinzufügen und Administrator wird nicht über System-Updates informiert!
Gertvdijk
Was auch immer automatisch gestartet wird (was dazu führt, dass mehr als 30 Kopien ausgeführt werden), muss die Sperre durchführen. Oder es könnte es selbst tun, pro Benutzer. So oder so, das ist ein Fehler, der behoben werden muss.
Derobert
Nagios / Icinga scheint die Falle zu umgehen. Zumindest hatte es einige 10s Timeout und warnte, wenn es überschritten wurde. (Obwohl ich nicht finde, wie ich das Timeout konfigurieren kann - ich würde es länger bevorzugen). Byobu unter Debian hat das Problem für mich verursacht. auf Ubuntu soll es behoben sein .
Sourcejedi
4

Sie müssen herausfinden, welcher Prozess apt-check erzeugt. Sie können so etwas wie ps verwenden, um den Prozessbaum zu erhalten.

ps -A --forest

Wenn apt-check keine Eltern hat, liegt möglicherweise ein Problem mit apt-check selbst und nicht mit einem bestimmten Programm vor. In diesem Fall würde ich versuchen, apt-check zu debuggen.

Streicher
quelle
Vielen Dank. Hat mir ein paar Ideen gegeben, in die ich mich vertiefen kann. Aber ich diese führen zu glauben , dass es ein Problem der apt-checkwirklich - siehe meine eigene Antwort .
Gertvdijk
Wenn es Speicher und CPU-Zeit verbraucht, ist es kein Zombie.
Gilles 'SO- hör auf böse zu sein'
@ Gilles guter Punkt.
Streicher
0

Schriftliche Basis auf Ubuntu 12.04

Ich habe das gleiche Problem und habe herausgefunden, dass es keinen Prozess geben wird byobu, wenn ich es nur apt-get updatenicht verwende . Außerdem bezieht sie sich auf verpacken, wenn ich diese Pakete entfernt (update-notifer-common, update-notifier), mit und laufen , lief es einen anderen Befehl , sondern ganz das gleiche Speicher verwendet: .byobucheck-aptupdate-notifierbyobuapt-get updateapt-get -s -o Debug::NoLocking=true upgrade

Einige andere Dinge können ausgeführt werden apt-get update(aber wahrscheinlich nicht ausgeführt werden check-apt)

  • Übergabe des Arguments an check_apt, um pkg zu aktualisieren / zu aktualisieren.
  • Wenn konfiguriert, wird /etc/cron.daily/aptmöglicherweise auch die Paketliste aktualisiert (siehe https://help.ubuntu.com/lts/serverguide/automatic-updates.html ), sie wird jedoch nur einmal am Tag ausgeführt und sollte kein Problem darstellen.

Auf einem Desktop können weitere Dinge beteiligt sein.

Fazit: byobuFängt das Ereignis ab, wenn Sie apt-get updatediese check-aptProzesse ausführen und auslösen. Konfigurieren Sie die Statusleiste neu byobu, um dies zu beheben.

HVNSweeting
quelle