KVM i task blocked for more than 120 seconds – solved

Sprawę miałem opisać już jakiś czas temu i zapomniałem, a jest szansa, że komuś się przyda. Był sobie serwer, na którym działało trochę VPSów. Wszystkie KVM, wszystkie z systemem plików ext4 i obrazem dysku qcow2. Czyli standard. Sprzęt nie pierwszej młodości, ale działały względnie stabilnie. Poza jedną, w sumie najbardziej obciążoną, bo działał w niej jeden z serwerów Zabbixa. Niespecjalnie obciążony w porównaniu z innymi, w których jednak żaden nie działał w KVM.

Tej jednej zdarzał się zaliczyć zwis, z komunikatami dotyczącymi KVM i task blocked for more than 120 seconds:

kernel: INFO: task XXX blocked for more than 120 seconds.kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

Wymagany był reboot wirtualki. Dotyczyło to różnych tasków, a całość działa się losowo. Potrafiło działać przez kilka tygodni, a potrafiło wywalić się co parę dni, co nie ułatwiało diagnostyki. Początkowo działo się to na tyle rzadko, że sprawa została zignorowana. Jedkal w miarę wzrostu obciążenia maszyny fizycznej, problem się nasilał. Objaw był taki, że operacje wymagające zapisu na dysk nie wykonywały się (czyli monitoring zdychał). Zacząłem szukać przyczyn. Pierwotnie podejrzenie padło na coś, co wykonuje się z crona, bo sporo procesów crona wisiało. Jedak przejrzenie skryptów pokazało, że niespecjalnie mogą one być przyczyną

Wyglądało, jakby momentami coś nie wyrabiało się dostępem do dysków w momentach większego obciążenia. Z tym, że znowu – widać było, że nie jest to deterministyczne. Ponieważ maszyny jak wspomniałem starawe, to podejrzenie padło na sprzęt – problemy z dostępem do dysków potrafią robić cuda. SMART pokazywał, że wszystko OK, ale sprawdzić nie zawadzi… Przeniesienie wirtualki na inną, mniej obciążoną maszynę fizyczną nie przyniosło rezultatów – wieszało się nadal, chociaż rzadziej.

Oczywiście wyłączenie komunikatu, które jest w nim wspomniane, nie rozwiązuje problemu. W międzyczasie trafiłem na opis rozwiązania problemu KVM task blocked, czyli zmniejszenie vm.dirty_ratio oraz vm.dirty_backgroud_ratio. Tylko że… to nie pomogło. Nie pomogło także zwiększenie kernel.hung_task_timeout_secs początkowo do 180, potem do 300 sekund. Było trochę lepiej, ale problem nadal występował. Pół żartem, pół serio zacząłem się zastanawiać nad automatycznym rebootem po wystąpieniu problemu (zawsze to krótsza przerwa), ale to brzydkie obejście, nie rozwiązanie. Tym bardziej, że w miarę wzrostu obciążenia i VPSa, i maszyny fizycznej na której on działał, problem zaczął występować częściej. Góra co parę dni. Paradoksalnie, dobrze się stało, bo i motywacja większa, i sprawdzanie efektu wprowadzonych zmian łatwiejsze.

Z braku opisów w sieci, pomocy znajomych adminów i innych pomysłów zacząłem sprawdzać po kolei wszystko. Od fsck systemu plików, przez nowsze wersje kernela, zarówno na maszynie fizycznej, jak i na wirtualce – a nuż coś poprawili. Bez rezultatu. Ostatecznie postanowiłem zmienić format dysku wirtualki z qcow2 na raw i… trafiony, zatopiony – wirtualka zaczęła działać stabilnie.

Dla pewności wróciłem jeszcze z raw z powrotem na qcow2, na wypadek, gdyby chodziło o jakieś błędy, których nie wykrywało narzędzie do sprawdzania qcow2, ale… problem natychmiast wrócił. Gwoli ścisłości: ww. tuning dotyczący parametrów kernela z serii vm.dirty został zachowany.

LXDE -> LXQt – podejście pierwsze

Od dłuższego czasu (notka wskazuje, że już sześć lat, jak ten czas leci…) moim domyślnym – i w zasadzie jedynym używanym – środowiskiem na desktopie (ang.: desktop environment) jest LXDE. Nie udało mi się oczywiście całkiem zrezygnować z zależności od KDE. Z aplikacji przychodzących z KDE ostały się: edytor kate (jednak z GUI – najwygodniejszy, obecnie myślę o Atom, ale kobyła…); konsole (w szczególnych przypadkach typu konieczność wyboru charsetu, bo lxterminal ogólnie działa bardzo fajnie) oraz… kdiff3, który jest wygodny. Ale nie o tym ma być notka. Będzie porównanie LXDE vs LXQt.

Środowisko LXDE

Środowisko LXDE Źródło: http://lxde.org/lxde_desktop/

Swego czasu w sieci było sporo zachwytów nad LXQt i trochę bolało mnie, że nie ma paczek w Debianie, żeby się pobawić. Potem zauważyłem, że paczki pojawiły się w unstable, ale nie było już jakoś ani czasu, ani ochoty. Ostatnio sobie przypomniałem o ich istnieniu, zainstalowałem pakiety, przelogowałem się i… trochę rozczarowanie. Może za dużo czytałem zachwalania i miałem za wysokie oczekiwania, ale przyznam, że LXQt nie powaliło mnie.

Pierwsze co mi się rzuciło w oczy, to brzydkie dekoracje okien i brak większego wyboru w tym zakresie. OK, może kwestia przyzwyczajenia. Do tego doszły braki widgetów (np. wyloguj) oraz zmiany działania tych, które były wcześniej używane. Przykładowo wykres użycia CPU czy RAM zawiera teraz więcej informacji, na jednym wykresie. W przypadku CPU pokazuje nie po prostu zużycie, ale z rozbiciem na nice, system, user. RAM podobnie – used, buffers… Po co to komu na desktopie, tak naprawdę? Na pierwszy rzut oka jest mniej czytelnie, choć informacji więcej. I jest to ogólny trend. Widget do pokazywania temperatury korzysta domyślnie ze wszystkich możliwych źródeł, zarówno tych działających, jak i nie działających. I żeby było „normalnie”, to trzeba wyłączyć niechciane (i niedziałające).

Podgląd pulpitów jakiś taki brzydszy. Znaczy wybór pulpitów, bo podglądu po prostu nie ma. QTerminal nadal nie ma możliwości wyboru kodowania. Wbudowane blokowanie terminala (czyli screensaver) odwołuje się do nieistniejącej binarki, chociaż to akurat obchodzę przy pomocy xscreensavera, tak samo miałem zrobione w LXDE.

Żeby nie było, że tylko wady: widać, że poświęcono trochę pracy na łatwiejsze (drag & drop) dodawanie programów do pasków. Pojawiło się jakby więcej opcji w wielu miejscach. Trochę mam skojarzenia z KDE 3.5 (tak jak je pamiętam), jeśli chodzi o możliwości konfiguracji. Wiele rzeczy daje się obejść, np. zamiast brakującego widgetu do wylogowania można użyć drugiego paska ze skrótami do aplikacji i tam przeciągnąć z menu odpowiednie programy. Zdecydowanie fajny jest menadżer nośników wymiennych – w LXDE nie korzystałem, nie wiem czy w ogóle był.

Drobiazgów typu zużycie RAM nie mierzyłem – w porównaniu z dowolną przeglądarką WWW to są orzeszki teraz… Ogólnie środowisko działa szybko i sprawnie. Mam je na domowym desktopie od jakichś dwóch tygodni i zdecydowanie daje się używać.

Środowisko LXQt

Środowisko LXQt. Źródło: http://lxqt.org/screenshots/dark/

Podsumowując: wygląd jest sprawą dyskusyjną. Moim zdanie LXQt nie wnosi nic specjalnego w stosunku do LXDE, poza wyglądem, więc jeśli ktoś korzysta z LXDE, to raczej nie będzie zachwycony zmianą. Faktem jest, że LXQt działa i daje się używać, więc gdyby LXDE zniknęło, to mam wybranego następcę. Zmiana filozofii z „jest prosto i działa” na „można więcej skonfigurować” – co kto lubi. Mi LXDE pasowało, bo korzystałem z praktycznie niemodyfikowanej konfiguracji domyślnej i wielką zaletą przesiadki na LXDE był właśnie fakt, że praktycznie wszystko od kopa działa i nie trzeba rzeźbić. Przy przejściu z LXDE na LXQt trochę trzeba się pobawić z konfiguracjami.

Póki co zostawiam LXQt, żeby pozbyć się przyzwyczajeń, ale nie wykluczam, że za parę tygodni wrócę do LXDE. Tym bardziej, że właśnie z LXDE korzystam na innych desktopach – paczki LXQt w Debianie są dopiero w testing i wyżej.

UPDATE Pojedynek LXDE vs LXQt na dłuższą metę wygrało jednak LXDE. Jakoś przyjemniej to moim zdaniem wygląda.

Planeta Joggera

Jak było wspominane, Jogger się zamyka. Padł pomysł, żeby nie rozleźć się całkiem i jakoś zachować kontakt. Tym bardziej, że część ludzi się przeniosła z blogami w inne miejsce i nadal pisze. Poza tym, ma to być taki trochę pomniczek, czy też – dla wierzących/kultywujących – ołtarzyk.

Ponieważ jakieś tam doświadczenie z tworzeniem tzw. planet miałem, a niespecjalnie coś się, mimo zapowiedzi, działo ze strony oficjalnej i w ogóle pojawiły się głosy wątpiące, że coś się ruszy, to stwierdziłem, że zrobię planetę. W końcu to moment, bo gotowce gdzieś mam, wystarczy zebrać URLe. Tak powstała Planeta Joggera. Z założenia miało być open source (GitHub coraz bardziej mi się podoba, wielowymiarowo, w końcu jakiś social network z sensem…). Czyli jak się właścicielom spodoba, to skorzystają, więc powstało stosowne repozytorium na GH. A tymczasem może wisieć u mnie – serwer mam tak czy inaczej, zasobów wiele to nie potrzebuje.

Odgrzebałem stare skrypty i konfigi dotyczące planety. Zakląłem. Potem zainstalowałem planet venus i zakląłem wiele razy… Jakąś wersję udało się ostatecznie sklecić. IMO wygląda to nawet znośnie i estetycznie i robi swoją robotę, ale niesmak dot. planet venus pozostaje. Skrypt, który niby ma umieć skracać artykuły średnio chce działać. Przynajmniej dla treści strony, przynajmniej z takim formatem template, jaki jest używany. A specjalnie grzebać przy frontendzie nie chce, jednak, szczególnie, że miałoby to być tak samo, ale inaczej. Chociaż troszkę pogrzebałem i mój skill dot. CSS gwałtownie wzrósł.

Mniejsza jednak nawet o ten skrypt. Ogólnie HTTPS zwykle działa, ale dla niektórych kanałów RSS… nie działa. Zresztą, jest jeden URL, z którym jest zawsze problem, czy to po HTTP, czy po HTTPS. A nic wymyślnego – WordPress. Jeden z wielu. Jeśli myślicie, że chce mi się debugować pythonowy kod, który ostanie commity na GH ma parę lat temu, to źle myślicie. Ogólnie być może warto zmienić silnik, ale ten po pierwsze już jest. Po drugie jakoś działa, więc może kiedyś (czytaj: pewnie nie). Gdyby ktoś rozważał stawianie planety i nie miał doświadczenia z żadnym silnikiem, ani gotowców, to sugeruję raczej nie tracić czasu na testowanie planet venus, tylko przejść do innych rozwiązań. Chociaż planeta Debiana jest właśnie na tym oparta i jakoś działa…

Tak czy owak, bunkrów nie ma, ale i tak jest zajebiście i jestem zadowolony z efektu, który można zobaczyć tutaj. Można pomóc! Jest parę issues otwartych na GH, wiem, że może tego bloga czytać parę osób, które niekoniecznie zaglądają na Joggera, ale które miały tam blogi, albo chociaż czytały, więc drobny apel tutaj. Przejrzyjcie czytniki RSS i jeśli znacie jakichś bloggerów, którzy zaczynali na Joggerze, a teraz piszą gdzie indziej, to dajcie im znać. I zapraszam do dołączenia ich blogów do planety (pull request pls!). Planeta Joggera jest zrobiona maksymalnie tak, by nie kraść treści (noarchive, noindex). Więc raczej nikt nie powinien mieć nic przeciwko obecności na planecie. Ale zapytać oczywiście wypada.