| Termin | Definicja |
|---|---|
| Blokady i deadlocki | Blokady i deadlocki to zestawienie dwóch powiązanych zjawisk związanych z rywalizacją transakcji o dostęp do wspólnych zasobów. Blokady i deadlocki – czym są w praktyceBlokady i deadlocki opisują sytuacje, w których kilka procesów, wątków albo operacji jednocześnie korzysta z tych samych zasobów i musi czekać na możliwość wykonania kolejnego kroku. Sama blokada nie musi oznaczać awarii. Często jest normalnym mechanizmem ochrony danych przed równoczesną modyfikacją. Dzięki niej dwa działania nie nadpisują sobie wyników i nie pozostawiają informacji w niespójnym stanie. Problem pojawia się wtedy, gdy oczekiwanie trwa zbyt długo, obejmuje zbyt wiele elementów albo prowadzi do zatrzymania całego łańcucha operacji. Deadlock, nazywany także zakleszczeniem, jest szczególnym rodzajem blokady. W takim układzie co najmniej dwa procesy oczekują na zasoby zajęte przez siebie nawzajem. Pierwszy proces posiada jeden zasób i czeka na drugi, a drugi posiada ten drugi i czeka na pierwszy. Żaden z nich nie może przejść dalej, ponieważ warunek potrzebny do kontynuowania pracy jest utrzymywany przez drugą stronę. W efekcie zadania pozostają aktywne, lecz nie wykonują postępu. Warto odróżnić zakleszczenie od chwilowego spowolnienia. Przy krótkiej blokadzie zasób zostaje zwolniony po zakończeniu operacji i oczekujące zadanie może ruszyć dalej. Przy deadlocku samo upływanie czasu nie rozwiązuje problemu, ponieważ zależności między procesami tworzą zamknięty obieg. Rozpoznanie tej różnicy ma znaczenie podczas diagnozowania zawieszania aplikacji, opóźnień zapisu, zatrzymywania zadań w tle oraz sytuacji, w których system reaguje wybiórczo, mimo że nie został całkowicie wyłączony. Blokady i deadlocki na tle innych mechanizmów współbieżnościBlokada jest narzędziem kontroli dostępu, a nie wyłącznie objawem usterki. Stosuje się ją między innymi po to, aby tylko jeden proces naraz mógł zmienić konkretny rekord, plik, bufor lub strukturę danych. W zależności od zastosowania może występować blokada współdzielona, pozwalająca kilku procesom na odczyt, albo blokada wyłączna, która ogranicza dostęp również do odczytu. Oprócz blokad spotyka się semafory, muteksy, kolejki komunikatów i mechanizmy transakcyjne. Każde z tych rozwiązań ma własne zasady nabywania i zwalniania zasobów. Nie każde wzajemne oczekiwanie jest deadlockiem. Czasem proces celowo czeka na odpowiedź z innego komponentu, na dane wejściowe albo na zakończenie obliczeń. Taka sytuacja może być poprawna, jeżeli istnieje gwarancja, że odpowiedź nadejdzie. W przypadku zakleszczenia potrzebny jest cykl zależności, w którym każdy uczestnik czeka na element utrzymywany przez kolejnego uczestnika. Z kolei livelock występuje wtedy, gdy procesy nie są formalnie zablokowane, lecz nieustannie reagują na siebie i wykonują działania, które nie przybliżają ich do zakończenia zadania. Istotna jest także różnica między blokadą logiczną a przeciążeniem zasobów. Przy dużym obciążeniu wiele operacji może stać w kolejce, ale każda z nich ostatecznie otrzymuje dostęp. Przy zakleszczeniu kolejka nie posuwa się naprzód, ponieważ uczestnicy trzymają zasoby potrzebne innym uczestnikom. W obserwacji problemu pomaga zatem nie tylko pomiar czasu odpowiedzi, lecz także sprawdzenie, kto posiada dany zasób, kto na niego czeka oraz w jakiej kolejności zostały rozpoczęte poszczególne działania. W analizie często wykorzystuje się graf zależności. Węzły oznaczają procesy lub transakcje, a krawędzie pokazują relację oczekiwania. Jeżeli graf zawiera zamknięty cykl, istnieje ryzyko deadlocka. Taki model pozwala uporządkować sytuację nawet wtedy, gdy komunikaty aplikacji są ogólne, na przykład wskazują tylko na przekroczenie czasu oczekiwania albo brak odpowiedzi. Typowe blokady i deadlocki oraz ich objawyJednym z częstych źródeł problemu jest różna kolejność zajmowania zasobów. Pierwszy proces blokuje zasób A, a następnie próbuje uzyskać dostęp do zasobu B. Drugi postępuje odwrotnie: najpierw zajmuje B, a później oczekuje na A. Przy pojedynczych uruchomieniach może to wyglądać jak przypadkowe zawieszenie, natomiast przy większej liczbie równoczesnych zadań zjawisko staje się powtarzalne. Podobny schemat może pojawić się przy plikach, rekordach, urządzeniach wejścia i wyjścia, połączeniach komunikacyjnych lub zasobach pamięci. Objawy bywają różne. Aplikacja może przestać odświeżać interfejs, choć proces nadal jest widoczny jako uruchomiony. Operacja zapisu może trwać bez końca, a kolejne zadania mogą tworzyć rosnącą kolejkę. Czasem działa odczyt, lecz modyfikacja danych nie dochodzi do skutku. W innych przypadkach zawiesza się tylko jedna funkcja, podczas gdy pozostałe elementy programu reagują poprawnie. Przyczyną może być także przerwana transakcja, która nie zwolniła zasobu, błędna obsługa wyjątku albo oczekiwanie na odpowiedź, której druga strona nie wysyła. Na poziomie urządzenia objawem może być chwilowe zatrzymanie pracy, powtarzające się obciążenie procesora, opóźnione otwieranie plików lub niestabilne działanie konkretnej aplikacji. Nie oznacza to automatycznie uszkodzenia podzespołu. Problemy programowe, błędna synchronizacja i nieprawidłowa kolejność operacji mogą dawać wrażenie usterki sprzętowej. Dlatego przed wymianą elementów warto sprawdzić logi, stan procesów, czas oczekiwania, historię zdarzeń oraz powtarzalność objawu. Podczas diagnostyki należy zwrócić uwagę na moment wystąpienia problemu. Jeżeli zawieszenie pojawia się po uruchomieniu kilku zadań jednocześnie, podejrzenie konfliktu jest większe. Jeżeli występuje wyłącznie po wznowieniu pracy, po utracie połączenia albo po przerwaniu operacji, możliwe jest niepełne zwolnienie zasobu. Pomocne bywa zapisanie kolejności działań poprzedzających problem, nazw używanych aplikacji i informacji o tym, czy ponowne uruchomienie usuwa objaw tylko tymczasowo. Jak ograniczać blokady i deadlocki w codziennej pracyNajskuteczniejszą metodą ograniczania zakleszczeń jest ustalenie jednej kolejności pozyskiwania zasobów. Jeżeli wszystkie procesy najpierw uzyskują dostęp do A, a dopiero później do B, znika jeden z warunków prowadzących do cyklu oczekiwania. Równie ważne jest możliwie szybkie zwalnianie zasobów. Długie operacje obliczeniowe, komunikacja z użytkownikiem i oczekiwanie na zewnętrzną odpowiedź nie powinny odbywać się w czasie, gdy proces utrzymuje blokadę potrzebną innym zadaniom. Warto stosować ograniczenia czasu oczekiwania. Mechanizm timeoutu pozwala przerwać operację, zapisać informację diagnostyczną i podjąć kontrolowaną próbę ponowienia działania. Samo ponawianie nie powinno jednak odbywać się bez ograniczeń, ponieważ może zamienić blokadę w pętlę ciągłych prób. Przydatne jest także rozdzielenie odczytu i zapisu, zmniejszanie zakresu transakcji oraz unikanie sytuacji, w której jedna blokada obejmuje wiele niezależnych elementów. W przypadku już występującego zakleszczenia można zastosować kilka strategii. Jedna z nich polega na wycofaniu jednej transakcji, aby zwolnić zasoby i umożliwić kontynuację pozostałym. Inna zakłada wykrywanie cyklu i wybór procesu, którego przerwanie powoduje najmniejsze straty. W środowiskach, w których ważna jest ciągłość pracy, przydają się kontrolowane restarty pojedynczych usług lub aplikacji, lecz powinny być traktowane jako sposób przywrócenia działania, a nie zastępstwo dla ustalenia przyczyny. Użytkownik może ograniczyć ryzyko przez aktualizowanie używanych programów, zamykanie niepotrzebnych procesów, unikanie równoczesnego uruchamiania wielu ciężkich operacji oraz zachowanie kopii ważnych danych. Przy powtarzających się zawieszeniach dobrze jest zanotować godzinę, wykonywane czynności i sposób ustąpienia problemu. Taki opis ułatwia odróżnienie deadlocka od przeciążenia, błędu sterownika, problemu z dostępem do pliku lub niestabilności systemu. Kiedy blokady i deadlocki wymagają zgłoszenia do serwisuZgłoszenie do serwisu jest uzasadnione, gdy blokady powtarzają się mimo ponownego uruchomienia, dotyczą wielu aplikacji, uniemożliwiają zapis danych albo powodują regularne zatrzymywanie pracy. Szczególnej uwagi wymagają sytuacje, w których system przestaje reagować, pojawiają się błędy zapisu, urządzenie samooczynnie przerywa operacje lub problem występuje po zmianie podzespołu, sterownika albo konfiguracji. W takim przypadku potrzebne może być sprawdzenie zarówno warstwy programowej, jak i stanu nośnika danych, pamięci oraz układów odpowiedzialnych za komunikację. Przed przekazaniem urządzenia warto przygotować opis objawów, listę aplikacji uruchamianych w chwili zawieszenia i informację, czy problem znika po restarcie. Nie należy wielokrotnie przerywać zapisu ważnych danych ani usuwać dzienników zdarzeń, jeżeli mogą pomóc w ustaleniu przebiegu awarii. Jeżeli komputer pozostaje zablokowany, bezpieczniej ograniczyć liczbę wymuszonych wyłączeń i wcześniej zabezpieczyć dostępne pliki. W Warszawie analizę takich problemów można zlecić firmie Warszawskie Pogotowie Komputerowe 24/7. W ramach rozpoznania można sprawdzić, czy przyczyną są zależności między procesami, błędna konfiguracja, konflikt aplikacji, problem z nośnikiem danych czy usterka elementu sprzętowego. Wynik diagnostyki powinien wskazywać nie tylko sposób przywrócenia działania, lecz także działania ograniczające ryzyko ponownego wystąpienia blokad i deadlocków. |