| Termin | Definicja |
|---|---|
| Zawieszanie się długich skryptów | Zawieszanie się długich skryptów wskazuje na brak obsługi timeoutu lub zapętloną operację oczekującą na niedostępny zasób. Dlaczego długi skrypt przestaje odpowiadaćZawieszanie się długiego skryptu oznacza, że program wykonujący instrukcje przez dłuższy czas nie przechodzi do kolejnego etapu albo przestaje komunikować postęp. Sam długi czas działania nie musi oznaczać awarii. Skrypt może poprawnie przetwarzać dużą liczbę plików, rekordów lub obliczeń, lecz użytkownik widzi wtedy wysokie użycie procesora, pamięci albo dysku, a proces pozostaje aktywny. Problem pojawia się wtedy, gdy wykonanie zatrzymuje się na jednej operacji, nie kończy po upływie oczekiwanego czasu lub zużywa zasoby bez kontroli. Częstą przyczyną jest brak timeoutu, czyli limitu czasu oczekiwania na odpowiedź. Dotyczy to między innymi połączeń sieciowych, odczytu pliku z niedostępnego nośnika, odpowiedzi usługi, zapytania do bazy danych albo oczekiwania na zwolnienie pliku używanego przez inny proces. Jeżeli kod nie określa maksymalnego czasu oczekiwania i nie obsługuje błędu, wątek może pozostawać zablokowany przez czas zależny od systemu, sterownika lub zewnętrznego zasobu. Pętle, blokady i oczekiwanie na zasóbDrugim źródłem problemu może być pętla nieskończona lub pętla, której warunek zakończenia nigdy nie staje się prawdziwy. Taka sytuacja występuje na przykład wtedy, gdy zmienna sterująca nie jest aktualizowana, funkcja zwraca stale tę samą wartość albo warunek porównuje dane w niewłaściwym formacie. W skrypcie przetwarzającym kolejne elementy błąd może powodować ponowne dodawanie tego samego elementu do kolejki, wielokrotne ponawianie nieudanego żądania lub powrót do wcześniejszego etapu bez licznika prób. Wykonanie może również zatrzymać się na blokadzie. Proces czeka wtedy na dostęp do pliku, urządzenia, gniazda sieciowego, pamięci współdzielonej albo innego zasobu zajętego przez równoległą operację. Szczególnym przypadkiem jest zakleszczenie, w którym dwa lub więcej procesów czeka na zasoby posiadane wzajemnie przez pozostałe procesy. Przyczyną pozornego zawieszenia może być też wyczerpanie pamięci operacyjnej, przepełnienie pliku wymiany, przeciążenie dysku lub błędy nośnika powodujące bardzo długie próby odczytu. Objawy możliwe do rozróżnienia podczas sprawdzaniaPodczas analizy warto ustalić, czy proces nadal wykonuje instrukcje, czy rzeczywiście oczekuje. Stałe wysokie użycie jednego rdzenia procesora może wskazywać na intensywne obliczenia albo błędną pętlę. Niskie użycie procesora przy jednoczesnym oczekiwaniu na odpowiedź częściej pasuje do blokady wejścia-wyjścia, operacji sieciowej lub dostępu do pliku. Skoki aktywności dysku mogą oznaczać przetwarzanie danych, użycie pamięci wirtualnej albo wielokrotne odczyty tego samego obszaru. Pomocne są komunikaty rejestrowane przed rozpoczęciem i po zakończeniu ważnych etapów. Jeżeli ostatni zapis wskazuje na rozpoczęcie połączenia, odczytu lub wywołania funkcji, a nie ma komunikatu końcowego, podejrzany jest właśnie ten odcinek. Należy także sprawdzić kod zakończenia procesu, wyjątki, dzienniki systemowe oraz moment, w którym problem występuje. Powtarzalne zatrzymanie na tym samym elemencie może wskazywać na konkretny uszkodzony plik lub rekord, natomiast losowe zatrzymania częściej wiążą się z zasobami, współbieżnością albo niestabilnym połączeniem. Ograniczanie ryzyka zatrzymania wykonaniaBezpieczny skrypt powinien mieć timeouty dopasowane do rodzaju operacji, obsługę wyjątków oraz ograniczoną liczbę ponowień. Ponawianie żądania bez przerwy i bez maksymalnego licznika prób może zamienić chwilowy błąd w trwałe zawieszenie. Przydatne jest również rozdzielenie dużego zadania na mniejsze etapy, zapisywanie postępu oraz pomijanie albo oznaczanie elementów, których nie udało się przetworzyć. Dzięki temu przerwanie procesu nie wymusza rozpoczynania całej pracy od początku. Jeżeli zawieszanie występuje na laptopie lub komputerze PC, Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów stacjonarnych i ich podzespołów. W praktyce diagnostyka może obejmować stan pamięci operacyjnej, dysku, systemu operacyjnego, sterowników oraz środowiska, w którym uruchamiany jest skrypt. Pozwala to rozdzielić błąd samego programu od problemu sprzętowego lub systemowego, który jedynie ujawnia się podczas długotrwałego obciążenia. |