Mam serwer Ubuntu 12.04, który właśnie się zawiesił z bardzo oczywistej przyczyny: ponad 30 apt-checkprocesów zużywa całą pamięć, uruchamia się zabójca OOM, zabija ważne usługi. Nie jestem pewien, skąd apt-checkpochodzą procesy, ale chyba wtyczki Nagios / Icinga check_aptmogłyby z niego skorzystać, a byobulinia statusu może chcieć wyświetlić jego wynik. Wydaje mi się, że coś jest zamknięte, a wszystkie procesy tylko czekały, ale utrzymywały pamięć.
Jak mogę zapobiec tak dużej liczbie wystąpień apt-checkw systemie? Nie ma to dla mnie sensu i powinno po prostu wyjść, gdy tylko nie będzie można uzyskać blokady odczytu w bazie danych dpkg.
Wygląda na to, że nie tylko ja mam tutaj kłopoty. Wszystkie sugestie dotyczące apt-checksą dość negatywne:
(czysta przeglądarka, niezalogowany, brak spersonalizowanego wyszukiwania)
Niektórzy zagłębili się w apt-checkte wskazówki, że jest to bardzo tępy skrypt, który wymaga naprawy. Z całym szacunkiem dla jego autorów, zawodzi na moich serwerach. Oto moje przemyślenia:
Kombinacja dwóch ostatnich pozwala układać się bez końca w spiralę w dół. Jeśli system jest używany do innych celów o wyższym priorytecie, liczba procesów po prostu wzrośnie i nie będzie końca, ponieważ apt-checknigdy nie uzyska nad nim żadnego priorytetu. Kłopoty nasilą się, gdy zabójca z OOM zdecyduje się zabić wasze ważne procesy systemowe.
Jeśli którykolwiek z tych dwóch aspektów zachowania byłby inny, to nie pozwoliłoby, aby system znalazł się w tak złym stanie, to moje założenie.
Chociaż ciągi mają rację co do tego, że procesy nadrzędne są w tym również odpowiedzialne, uważam, że poniższe punkty są wadliwe apt-checki należy je zgłosić jako błąd, aby poprawnie rozwiązać:
powinien wyjść, jeśli zdobycie informacji zajmuje nieuzasadniony czas
W rzeczywistości wygląda na to, że zabójca Linux OOM robi na tym trochę heurystyki. Procesy wygładzone uzyskają wyższy wynik, a procesy długotrwałe zostaną zmniejszone. ( źródło - dzięki Ulrichowi Dangelowi za wskazanie tego )
Możliwe rozwiązanie, które mogę zaproponować:
wyniki pamięci podręcznej po przetworzeniu
wyjściową pamięć podręczną, jeśli jest mniejsza niż N ilość sekund bez ładowania wszystkich bibliotek Python-APT dla każdego prostego (parzystego --help) wywołania.
skonfiguruj nicelevel do konfiguracji - Pozwól mi to zmienić / wyłączyć, proszę! Uważam, że ustawienie wartości 0 naprawdę pomoże
Myślę, że przegapiłeś największą rzecz, jaką powinien zrobić: użyj pliku blokującego i nie zezwalaj na uruchamianie więcej niż jednej instancji na raz.
derobert
@derobert To skrypt, który może uruchomić każdy użytkownik bez określonych uprawnień w systemie Ubuntu, a nie demon. Czy mogę bezpiecznie używać /var/run/ /tmpdo tego pliku blokady do odczytu / zapisu? Wielka dziura: dodaj plik blokady, a administrator nie będzie powiadamiany o aktualizacjach systemu!
gertvdijk
Cokolwiek jest uruchamiane automatycznie (co prowadzi do uruchomienia ponad 30 kopii), musi wykonać blokowanie. Lub może zrobić to sam, na użytkownika. Tak czy inaczej, jest to błąd, który należy rozwiązać.
derobert
Nagios / Icinga wydaje się unikać pułapki. Przynajmniej miał 10 sekund i ostrzegł, jeśli zostanie przekroczony. (Chociaż nie mogę znaleźć sposobu skonfigurowania limitu czasu - wolałbym dłużej). Byobu na Debianie spowodowało problem; na Ubuntu powinno to zostać naprawione .
sourcejedi
4
Musisz dowiedzieć się, jaki proces uruchamia apt-check. możesz użyć czegoś takiego jak ps, aby uzyskać drzewo procesów.
ps -A --forest
Jeśli apt-check nie ma rodziców, może to oznaczać problem z apt-check sam, a nie z konkretnym programem. w takim przypadku spróbowałbym debugować apt-check.
Dzięki. Dał mi kilka pomysłów do głębszego zbadania. Doprowadziło mnie to jednak do przekonania, że to apt-checknaprawdę problem - zobacz moją odpowiedź .
gertvdijk
Jeśli zużywa pamięć i czas procesora, to nie jest zombie.
Gilles „SO- przestań być zły”
@Gilles dobry punkt.
struny
0
Baza pisemna na Ubuntu 12.04
Mam ten sam problem i dowiedziałem się, że ponieważ byobupo prostu apt-get updatenie używam byobu, nie będzie check-aptprocesu. Również dotyczy to update-notifierpakować, kiedy usunąłem te pakiety (update-notifer-common, update-powiadamiający), stosując byobui run apt-get update, zabrakło innego polecenia, ale to samo pamięci przy użyciu: apt-get -s -o Debug::NoLocking=true upgrade.
Niektóre inne rzeczy mogą działać apt-get update(ale prawdopodobnie nie działają check-apt)
przekazanie argumentu do check_aptaktualizacji / aktualizacji pkg.
Wniosek:
byobuwychwytuje zdarzenie po uruchomieniu apt-get updatei uruchomieniu tych check-aptprocesów, ponownie skonfiguruj pasek stanu, byobuaby to naprawić.
/var/run
//tmp
do tego pliku blokady do odczytu / zapisu? Wielka dziura: dodaj plik blokady, a administrator nie będzie powiadamiany o aktualizacjach systemu!Musisz dowiedzieć się, jaki proces uruchamia apt-check. możesz użyć czegoś takiego jak ps, aby uzyskać drzewo procesów.
Jeśli apt-check nie ma rodziców, może to oznaczać problem z apt-check sam, a nie z konkretnym programem. w takim przypadku spróbowałbym debugować apt-check.
źródło
apt-check
naprawdę problem - zobacz moją odpowiedź .Baza pisemna na Ubuntu 12.04
Mam ten sam problem i dowiedziałem się, że ponieważ
byobu
po prostuapt-get update
nie używambyobu
, nie będziecheck-apt
procesu. Również dotyczy toupdate-notifier
pakować, kiedy usunąłem te pakiety (update-notifer-common, update-powiadamiający), stosującbyobu
i runapt-get update
, zabrakło innego polecenia, ale to samo pamięci przy użyciu:apt-get -s -o Debug::NoLocking=true upgrade
.Niektóre inne rzeczy mogą działać
apt-get update
(ale prawdopodobnie nie działającheck-apt
)check_apt
aktualizacji / aktualizacji pkg./etc/cron.daily/apt
może również aktualizować listę pakietów (patrz https://help.ubuntu.com/lts/serverguide/automatic-updates.html ), ale działa tylko raz dziennie i nie powinien stanowić problemu.Na pulpicie może być więcej rzeczy.
Wniosek:
byobu
wychwytuje zdarzenie po uruchomieniuapt-get update
i uruchomieniu tychcheck-apt
procesów, ponownie skonfiguruj pasek stanu,byobu
aby to naprawić.źródło