Come impedire l'esecuzione di così tanti casi di apt-check?


18

Ho un server Ubuntu 12.04 che si è appena schiantato a causa di una causa molto ovvia: oltre 30 apt-checkprocessi che consumano tutta la memoria, il killer OOM avvia, uccide i servizi vitali. Non sono sicuro da dove apt-checkprovengano i processi, ma immagino che i miei plugin Nagios / Icinga check_aptpotrebbero usarlo, così come la byobulinea di stato potrebbe voler visualizzare il suo output. Immagino che qualcosa sia stato bloccato e che tutti i processi fossero solo in attesa, ma con memoria.

Come posso evitare di avere così tante istanze apt-checksul sistema? Non ha senso per me e dovrebbe uscire non appena non riesce a ottenere un blocco di lettura sul database dpkg.

Sembra che non sia l'unico a trovarmi nei guai qui. Tutti i suggerimenti per apt-checksono piuttosto negativi:

inserisci qui la descrizione dell'immagine

(browser pulito, non collegato, nessuna ricerca personalizzata)

Risposte:


8

Qualche tuffo apt-checkmi ha dato questi indizi per essere uno script molto schietto che deve essere risolto. Con tutto il rispetto per gli autori, sta fallendo sui miei server. Ecco i miei pensieri:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • impone nicelevel 19 per se stesso
  • nessun timeout impostato su azioni

La combinazione degli ultimi due gli consente di accumularsi all'infinito a spirale verso il basso. Se il sistema viene utilizzato per altri scopi con priorità più elevata, la quantità di processi aumenterà e non vi sarà fine, poiché apt-checknon avrà mai alcuna priorità su di esso. I problemi peggioreranno solo quando il killer OOM deciderà di uccidere i processi vitali del sistema.

Se uno di questi due aspetti del comportamento fosse diverso, il mio presupposto non consentirebbe al sistema di finire in uno stato così rotto.

Mentre le stringhe hanno ragione sul fatto che anche i processi principali siano responsabili in questo, credo che i punti seguenti presentino difetti apt-checke debbano essere segnalati come bug per essere affrontati correttamente:

  • dovrebbe suggerire al killer OOM di essersi ucciso per primo
  • non dovrebbe impostare hardcoded nicelevel
  • dovrebbe uscire se ci vuole una quantità irragionevole di tempo per ottenere informazioni

In realtà, sembra che il killer OOM di Linux stia facendo un po 'euristico su questo. I processi con punteggio ottengono un punteggio maggiore e i processi di lunga durata vengono ridotti. ( fonte - grazie a Ulrich Dangel per averlo sottolineato )

Possibile soluzione che posso proporre:

  • risultati della cache dopo l'elaborazione
  • cache di output se inferiore a N quantità di secondi senza caricare tutte le librerie Python-APT per ogni --helpinvocazione semplice (pari ).
  • rendere configurabile nicelevel - Consentitemi di modificarlo / disabilitarlo, per favore! Credo che impostarlo su 0 aiuterà davvero
  • aumentare il punteggio del killer OOM

Penso che ti sia sfuggita la cosa più grande che dovrebbe fare: utilizzare un file di blocco e non consentire l'esecuzione di più di un'istanza alla volta.
derobert

@derobert È uno script che qualsiasi utente può eseguire, senza privilegi specifici su Ubuntu, non un demone. O posso usare /var/run/ /tmpper questo file di blocco leggibile / scrivibile in modo sicuro? Grande buco lì: aggiungi il file di blocco e l'amministratore non verrà informato degli aggiornamenti di sistema!
gertvdijk,

Qualunque cosa lo stia avviando automaticamente (portando a oltre 30 copie in esecuzione) deve eseguire il blocco. O potrebbe farlo da solo, per utente. Ad ogni modo, è un bug che deve essere risolto.
derobert,

Nagios / Icinga sembra evitare la trappola. Almeno, aveva un timeout di circa 10 secondi e avvisava se veniva superato. (Anche se non riesco a trovare il modo per configurare il timeout, preferirei più a lungo). Byobu su Debian è ciò che mi ha causato il problema; su Ubuntu dovrebbe essere corretto .
sourcejedi,

4

È necessario scoprire quale processo sta generando apt-check. puoi usare qualcosa come ps per ottenere l'albero dei processi.

ps -A --forest

Se apt-check non ha genitori, potrebbe essere un problema con apt-check e non con un programma specifico. in tal caso, proverei a eseguire il debug di apt-check.


Grazie. Mi ha dato alcune idee da approfondire. Tuttavia, questo mi porta a credere che sia apt-checkdavvero un problema : vedi la mia risposta .
gertvdijk,

Se sta consumando memoria e tempo della CPU, non è uno zombi.
Gilles 'SO- smetti di essere malvagio' il

@Gilles buon punto.
stringhe

0

Base scritta su Ubuntu 12.04

Ho lo stesso problema e ho scoperto che a causa di byobu, se corro semplicemente apt-get updatenon usando byobu, non ci sarà alcun check-aptprocesso. Inoltre, essa riguarda update-notifierconfezionare, estraendolo quei pacchetti (update-Notifer-common, update-notifier), utilizzando byobued eseguire apt-get update, esso riceve un altro comando, ma piuttosto la stessa memoria utilizzando: apt-get -s -o Debug::NoLocking=true upgrade.

Alcune altre cose potrebbero funzionare apt-get update(ma probabilmente non funzionano check-apt)

Su un desktop, ci sono più cose che potrebbero essere coinvolte.

Concludere: byoburileva l'evento quando si esegue apt-get updatee attiva questi check-aptprocessi, riconfigurare la barra di stato byobuper risolvere il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.