| Termin | Definicja |
|---|---|
| przekroczenie timeoutu przez serwer | Przekroczenie timeoutu przez serwer to przerwanie połączenia po zbyt długim oczekiwaniu na odpowiedź. Czym jest przekroczenie timeoutu przez serwerPrzekroczenie timeoutu przez serwer oznacza, że określony etap komunikacji trwał dłużej, niż dopuszczał ustawiony limit czasu. Po upływie tego limitu połączenie lub oczekiwanie na odpowiedź zostaje zakończone. Timeout nie musi oznaczać całkowitego wyłączenia serwera. Serwer może nadal działać, ale nie zdążył odpowiedzieć na żądanie w czasie zaakceptowanym przez klienta, przeglądarkę, aplikację pośredniczącą albo inny element infrastruktury sieciowej. W praktyce opóźnienie może powstać na kilku różnych etapach: podczas wyszukiwania adresu DNS, zestawiania połączenia TCP, negocjacji TLS, przesyłania żądania, wykonywania kodu aplikacji, odczytu danych z bazy lub przesyłania odpowiedzi. Dlatego sam komunikat o timeoutcie nie wskazuje jeszcze przyczyny. Do prawidłowej diagnozy trzeba ustalić, który komponent czekał, jaki limit obowiązywał oraz czy serwer otrzymał żądanie i rozpoczął jego obsługę. Gdzie powstaje opóźnienie i jakie daje objawyJeżeli problem występuje przed nawiązaniem połączenia, przyczyną może być niedostępny host, błędny adres, filtrowanie ruchu przez zaporę sieciową albo przeciążenie urządzenia obsługującego połączenia. Gdy połączenie zostało już ustanowione, opóźnienie może wynikać z wolnej pracy aplikacji, blokady zasobu, oczekiwania na bazę danych, braku wolnych wątków lub procesów oraz ograniczenia pamięci albo procesora. W przypadku połączeń szyfrowanych dodatkowy czas może być potrzebny na negocjację TLS, ale samo TLS nie jest dowodem awarii. Objaw zależy od miejsca wykrycia przekroczenia limitu. Przeglądarka może wyświetlić informację o zbyt długim oczekiwaniu, klient API może zwrócić wyjątek połączenia, a serwer proxy może wygenerować odpowiedź HTTP 504 Gateway Timeout. Kod 504 oznacza, że brama lub serwer pośredniczący nie otrzymał na czas odpowiedzi od serwera nadrzędnego. Nie należy utożsamiać go z kodem 408 Request Timeout, który dotyczy zbyt długiego oczekiwania serwera na żądanie od klienta. Są to różne sytuacje diagnostyczne. Diagnostyka przekroczenia limitu czasuPierwszym krokiem jest rozdzielenie problemu na warstwę sieciową i aplikacyjną. W systemie Windows można użyć polecenia Po stronie serwera należy porównać czas rozpoczęcia i zakończenia żądania w logach aplikacji, serwera HTTP oraz ewentualnego proxy. Ważne są także identyfikatory żądań, adresy docelowe, metoda HTTP, kod odpowiedzi i czas trwania operacji. Jeżeli w logu proxy występuje 504, a aplikacja nie rejestruje tego samego żądania, problem mógł wystąpić przed dotarciem ruchu do aplikacji. Jeżeli aplikacja widzi żądanie i kończy je dopiero po długim zapytaniu do bazy, przyczyny trzeba szukać w tej operacji, jej planie wykonania, blokadach lub przeciążeniu zależności. Samo zwiększenie timeoutu może wtedy jedynie wydłużyć oczekiwanie użytkownika. Usuwanie przyczyny timeoutuNaprawa zależy od ustalonego źródła opóźnienia. Przy problemach z DNS sprawdza się poprawność rekordów, czas ich propagacji i działanie właściwych serwerów nazw. Przy problemach z siecią analizuje się reguły zapory, routing, dostępność portu oraz utratę pakietów. W aplikacji warto mierzyć czas poszczególnych etapów obsługi, ograniczać operacje blokujące, poprawiać zapytania do bazy danych i kontrolować liczbę równoczesnych zadań. Pomocne jest także ustawienie osobnych limitów dla połączenia, odczytu nagłówków i pobierania całej odpowiedzi, ponieważ każdy z nich opisuje inny fragment komunikacji. Timeout powinien być traktowany jako kontrolowany mechanizm ochronny, a nie jako rozwiązanie problemu wydajności. Zbyt krótki limit powoduje przedwczesne kończenie poprawnych, lecz wolniejszych operacji. Zbyt długi może utrzymywać zajęte połączenia i zasoby, gdy zależność nie odpowiada. Po zmianie konfiguracji należy sprawdzić logi wszystkich uczestniczących komponentów oraz wykonać powtarzalne testy z typowym i zwiększonym obciążeniem. W diagnostyce laptopa lub komputera PC warto dodatkowo zweryfikować lokalne połączenie Wi‑Fi albo Ethernet, ustawienia DNS, działanie przeglądarki i zapory, ponieważ timeout może być skutkiem problemu po stronie urządzenia użytkownika, a nie zdalnego serwera. |