Przejdź do treści
PL

Strona główna / Przypadki z praktyki

Sporadyczne spowolnienie o 3 sekundy bez winowajcy wśród wtyczek

Objawy

Z pamięci podręcznej strony ładowały się w ok. 0,15 s. Bez niej (koszyk, kasa, logowanie, pierwsza wizyta po wyczyszczeniu cache) wahało się to od 0,8 do 4 s. Subiektywnie „strona bywa leniwa”.

Środowisko

WordPress z WooCommerce, page builderem i ok. 40 aktywnymi wtyczkami, hosting współdzielony z LiteSpeedem i jego cache.

Diagnoza

  1. Powtarzane pomiary. Kilka stron poza cache wczytywaliśmy co 75 s przez kilka minut. Spowolnienie nie było związane ze stroną główną: równie często dotyczyło zwykłej strony tekstowej. Mniej więcej połowa żądań w serii miała +3 s. Równe 3 s więcej wyglądały na timeout zewnętrznego wywołania (serwer licencji, API, fonty).
  2. Tymczasowa diagnostyczna wtyczka mu-plugin (za zgodą, bez danych osobowych). Logowała czas do głównych faz żądania (muplugins_loaded, plugins_loaded, init, wp_loaded, template_redirect, shutdown) i każde zewnętrzne wywołanie HTTP przez filtry pre_http_request i http_api_debug.
  3. Wynik był zaskakujący: wolne żądania (ok. 3,3 s, mniej więcej jedno na piętnaście) nie miały żadnego zewnętrznego wywołania HTTP. Spowolnione były wszystkie fazy równomiernie, najbardziej start do plugins_loaded (1,3 s zamiast 0,12 s). Żadna wtyczka więc się nie wyróżniała.
  4. Mu-plugin i jego log usunęliśmy zaraz po pomiarze i sprawdziliśmy, że adres zwraca 404.
Wolne żądanie jest wolniejsze we wszystkich fazach Mniej więcej co piętnaste żądanie trwało ponad 3 sekundy. Rozbicie na fazy pokazało, że wszystkie fazy zwolniły równomiernie i nie było żadnego wywołania zewnętrznego. To wskazuje na zimny start PHP, a nie na wtyczkę. Czas odpowiedzi poza cache 3,3 s zwykle 0,8–1 s Gdzie ginie czas (fazy WordPressa) szybkie wolne Wszystkie fazy dłuższe o tyle samo, bez wywołań zewnętrznych → zimny start PHP.
Mniej więcej co piętnaste żądanie trwało ponad 3 sekundy. Rozbicie na fazy pokazało, że wszystkie fazy zwolniły równomiernie i nie było żadnego wywołania zewnętrznego. To wskazuje na zimny start PHP, a nie na wtyczkę.

Przyczyna

Równomierne spowolnienie całego żądania bez zewnętrznych wywołań odpowiada zimnemu procesowi PHP na hostingu współdzielonym. Żądanie dostaje nowy proces z pustym opcache, który musi ponownie wczytać i skompilować kod wszystkich wtyczek. Nie jest to wina ani wtyczki, ani strony.

Co grozi, jeśli tego nie naprawisz

Wolne są właśnie te strony, na których się zarabia: koszyk, kasa i konto klienta. Każda dodatkowa sekunda czekania zwiększa liczbę porzuconych koszyków, a Google wlicza wolną odpowiedź serwera do oceny szybkości. Szukanie winowajcy wśród wtyczek kosztuje do tego czas i pieniądze za niepotrzebne zmiany.

Naprawa

Po stronie strony nie ma czego naprawiać. Zaleciliśmy:

  • zapytać pomoc techniczną hostingu o liczbę procesów PHP, jak długo żyją i jaki rozmiar ma opcache,
  • długofalowo zmniejszyć liczbę aktywnych wtyczek, żeby zimny start trwał krócej.

Odwiedzających, którym strony ładują się z cache, to nie dotyczy.

Weryfikacja

Głównym ustaleniem było wykluczenie: żadnego zewnętrznego wywołania i żadnej pojedynczej wtyczki. Zaoszczędziło to godzin wyłączania wtyczek na ślepo.

Zapobieganie i wnioski

Zanim zaczniesz szukać winowajcy wśród wtyczek, zmierz, które fazy żądania zwalniają. Jeśli wszystkie zwalniają tak samo, problem leży pod WordPressem (PHP, dysk, hosting), a nie w nim.

Powiązane usługi: Awarie i błędy Przyspieszenie strony

Masz podobne objawy?

Napisz mi adres strony i jakie ma objawy. Diagnoza jest bezpłatna i niezobowiązująca. Odpowiadam zwykle w ciągu jednego dnia roboczego.

Opisz objawy

lub od razu e-mailem na [email protected]