Limity wykonania PHP mają znaczący wpływ na szybkość przetwarzania zapytań i niezawodność działania serwera WWW pod obciążeniem. Pokażę, jakie limity czasowe jak naprawdę spowalniają, jak współdziałają z pamięcią i procesorem oraz jakie ustawienia zapewniają stabilność i szybkość działania stron takich jak WordPress i sklepów internetowych.
Punkty centralne
- Czas wykonania reguluje czas działania skryptów oraz określa limity czasu i wskaźniki błędów.
- Limit pamięci i czas wykonania współdziałają ze sobą, wpływając na czas ładowania i stabilność.
- Optymalizacja hostingu (php.ini, PHP‑FPM) zapobiega blokadom spowodowanym długimi skryptami i zbyt dużą liczbą procesów roboczych.
- WordPress/Sklep wymaga dużych limitów importów, kopii zapasowych, aktualizacji i zadań cron.
- Monitoring CPU, pamięci RAM i statusu FPM pozwala wykrywać wąskie gardła i nieprawidłowe ograniczenia.
Podstawy: Co naprawdę mierzy czas wykonania
Dyrektywa max_execution_time określa maksymalną liczbę sekund, przez które skrypt PHP może aktywnie wykonywać obliczenia, zanim nastąpi przerwanie. Licznik czasu uruchamia się dopiero wtedy, gdy PHP rozpocznie wykonywanie skryptu, a nie podczas przesyłania pliku lub gdy serwer WWW przyjmuje żądanie. Zapytania do bazy danych, pętle i renderowanie szablonów są w pełni wliczane do czasu, co jest szczególnie odczuwalne w przypadku słabszych procesorów. Jeśli skrypt osiągnie limit, PHP kończy wykonywanie i wysyła błąd typu „Maximum execution time exceeded“. W logach często widzę, że rzekome zawieszenie jest po prostu spowodowane Limit czasu wynika z zbyt restrykcyjnych wytycznych.
Typowe wartości domyślne mieszczą się w przedziale od 30 do 300 sekund, przy czym hosting współdzielony ma zazwyczaj bardziej restrykcyjne ograniczenia. Te ustawienia chronią serwer przed nieskończonymi pętlami i procesami blokującymi, które spowalniałyby innych użytkowników. Zbyt restrykcyjne wartości mają jednak wpływ na normalne zadania, takie jak generowanie obrazów lub parsowanie XML, które w przypadku dużego ruchu trwają dłużej. Wyższe limity ratują zadania wymagające dużej mocy obliczeniowej, ale mogą przeciążać instancję, jeśli jednocześnie wykonywanych jest kilka długich żądań. W praktyce testuję stopniowo i wyrównuję czas wykonania za pomocą Pamięć, procesora i równoległości.
Rzeczywisty wpływ: wydajność, wskaźnik błędów i wrażenia użytkownika
Zbyt niski limit czasowy powoduje twarde przerwy, które użytkownicy postrzegają jako uszkodzoną stronę. Aktualizacje WordPressa, zbiorcze optymalizacje obrazów lub duże eksporty WooCommerce szybko osiągają limit, co wydłuża czas ładowania i zagraża transakcjom. Jeśli zwiększę czas wykonania do 300 sekund i równolegle wdrożę OPcache, czasy odpowiedzi ulegną zauważalnemu skróceniu, ponieważ PHP będzie rzadziej kompilować na nowo. Przy niskich limitach obserwuję również większe obciążenie procesora, ponieważ skrypty uruchamiają się wielokrotnie, zamiast zakończyć działanie po jednym cyklu. Doświadczone Wydajność nie zależy więc wyłącznie od kodu, ale bezpośrednio od sensownie ustalonych wartości granicznych.
Zbyt wysokie wartości nie są przepustką do sukcesu, ponieważ długie procesy zajmują PHP‑Worker i blokują kolejne zapytania. W systemach współdzielonych prowadzi to do powstania wąskiego gardła dla wszystkich sąsiadów; w przypadku VPS lub serwerów dedykowanych może to spowodować przeładowanie maszyny. Trzymam się zasady: tak wysokie, jak to konieczne, tak niskie, jak to możliwe, i zawsze w połączeniu z buforowaniem. Jeśli proces regularnie trwa bardzo długo, przenoszę go do kolejki lub wykonuję jako zaplanowane zadanie. W ten sposób żądania frontendu pozostają krótkie, podczas gdy zadania wymagające dużego nakładu pracy są wykonywane w Kontekst bieg.
Praktyka: Obsługa WordPressa i sklepów internetowych bez limitów czasu
WordPress z wieloma wtyczkami i kreatorami stron korzysta z 256–512 MB. Pamięć i 300 sekund czasu wykonania, zwłaszcza w przypadku importu multimediów, kopii zapasowych i zadań związanych z tworzeniem kopii zapasowych. Kompilacja motywów, wywołania REST i zdarzenia cron są lepiej rozłożone, gdy OPcache jest aktywny, a pamięć podręczna obiektów przechowuje wyniki. W przypadku WooCommerce biorę dodatkowo pod uwagę długie zapytania do bazy danych i żądania API dotyczące usług płatniczych i wysyłkowych. Część stabilności wynika z czystego wyboru wtyczek: mniej redundancji, brak porzuconych dodatków. Jeśli masz wiele jednoczesnych zapytań, powinieneś Właściwe wymiarowanie PHP‑Worker, aby strony frontendowe zawsze miały wolny Proces odebrany.
Systemy sklepów internetowych z mapami witryn, kanałami informacyjnymi i synchronizacją ERP generują szczyty przekraczające standardowe limity. Procedury importu wymagają dłuższego czasu działania, ale umieszczam je w zadaniach, które są wykonywane poza żądaniami internetowymi. Jeśli nie da się tego rozdzielić, ustawiam okna czasowe w godzinach o małym natężeniu ruchu. W ten sposób odciążam ruch frontendowy i minimalizuję kolizje z kampaniami lub wydarzeniami sprzedażowymi. Przejrzysty plan zmniejsza Błąd odczuwalne i chroni przepływy konwersji.
Optymalizacja hostingu: php.ini, OPcache i sensowne wartości graniczne
Zaczynam od konserwatywnych wartości i celowo je zwiększam: max_execution_time = 300, memory_limit = 256M, OPcache aktywny i pamięć podręczna obiektów na poziomie aplikacji. Następnie obserwuję szczyty obciążenia i dostosowuję ustawienia małymi krokami, zamiast losowo wybierać wysokie wartości. Ograniczenia . W przypadku Apache plik .htaccess może nadpisać wartości; w przypadku Nginx robią to konfiguracje puli i ustawienia PHP-FPM. Ważne jest, aby po każdej zmianie wykonać ponowne ładowanie, aby nowe ustawienia faktycznie zaczęły obowiązywać. Kto zna swoje środowisko, może uzyskać więcej z tego samego sprzętu. Wydajność.
Podczas monitorowania zwracam uwagę na 95. percentyl czasu odpowiedzi, wskaźniki błędów i zajętość pamięci RAM na proces. Jeśli zadanie regularnie przekracza 120 sekund, sprawdzam ścieżki kodu, plany zapytań i usługi zewnętrzne. Zwięzły kod z jasnymi warunkami przerwania znacznie skraca czas działania. Dodatkowo warto dopasować limity przesyłania, post_max_size i max_input_vars, żeby żądania nie kończyły się niepowodzeniem z powodu spraw pobocznych. Dobra konfiguracja zapobiega reakcjom łańcuchowym wynikającym z Limity czasu i ponowne próby.
PHP‑FPM: procesy, równoległość i pm.max_children
Liczba równoczesnych procesów PHP określa, ile żądań może być przetwarzanych równolegle. Zbyt mała liczba procesów powoduje tworzenie się kolejek, a zbyt duża zajmuje zbyt dużo pamięci RAM i zmusza system do korzystania z pamięci wymiany. Równoważę pm.max_children względem memory_limit i średniego zużycia na proces, a następnie testuję przy użyciu rzeczywistego ruchu. Optymalny punkt utrzymuje niskie opóźnienia bez przeciążania hosta. Swapowanie . Jeśli chcesz zgłębić ten temat, znajdziesz więcej informacji na stronie Optymalizacja pm.max_children konkretne podejścia do sterowania Pracownik.
Oprócz samej liczby, liczą się również parametry startowe, takie jak pm.start_servers i pm.min_spare_servers. Jeśli dzieci są generowane zbyt agresywnie, pogarsza to czas zimnego startu i fragmentację. Sprawdzam również, jak długo pozostają zajęte żądania, zwłaszcza w przypadku zewnętrznych interfejsów API. Zbyt wysoka tolerancja czasu oczekiwania wiąże zasoby, które lepiej byłoby przeznaczyć na nowe żądania. Ostatecznie liczy się krótki czas pozostawania każdego żądania. Żądanie więcej niż maksymalny czas trwania.
Interakcja: czas wykonania, limit pamięci i zbieranie śmieci
Mała ilość pamięci RAM wymusza częste czyszczenie pamięci, co pochłania czas obliczeniowy i sprawia, że skrypty są bliższe Limit czasu Jeśli zwiększę limit pamięci w umiarkowanym stopniu, liczba cykli GC zmniejszy się, a czas wykonania wydłuży się. Dotyczy to zwłaszcza procesów przetwarzających duże ilości danych, takich jak parsery, eksporty lub transformacje obrazów. W przypadku przesyłania plików harmonizuję upload_max_filesize, post_max_size i max_input_vars, aby żądania nie kończyły się niepowodzeniem z powodu ograniczeń wejściowych. Bardziej szczegółowe informacje na temat efektów pamięci RAM podsumowuję w tym przeglądzie: Limit pamięci i zużycie pamięci RAM, który praktyczne związki oświetlone.
OPcache również działa jak multiplikator: mniej kompilacji oznacza krótszy czas pracy procesora na żądanie. Pamięć podręczna obiektów zmniejsza liczbę ciężkich odczytów bazy danych i stabilizuje czasy reakcji. W ten sposób krótkie okno czasowe zamienia się w stabilne przebiegi bez dalszego zwiększania limitu. Wreszcie, zoptymalizowane indeksy i odchudzone zapytania przyspieszają drogę do odpowiedzi. Każda zaoszczędzona milisekunda w aplikacji odciąża Wartości graniczne na poziomie systemu.
Pomiar i monitorowanie: dane zamiast intuicji
Najpierw dokonuję pomiarów, a następnie wprowadzam zmiany: status FPM, logi dostępu, logi błędów i wskaźniki, takie jak CPU, RAM i I/O zapewniają przejrzystość. Szczególnie pomocne są 95. i 99. percentyl, które uwidaczniają wartości odstające i obiektywizują optymalizacje. Po każdej zmianie sprawdzam, czy wskaźniki błędów spadają, a czasy odpowiedzi pozostają stabilne. Powtarzane testy obciążeniowe potwierdzają, czy nowe Ustawienia nawet w godzinach szczytu. Bez danych liczbowych rozdziela się tylko objawy, a nie rzeczywiste Przyczyny rozwiązać.
Wgląd w aplikacje zapewniają narzędzia do profilowania i logi zapytań, które ujawniają kosztowne ścieżki. Zewnętrzne interfejsy API rejestruję oddzielnie, aby oddzielić powolne usługi partnerskie od problemów lokalnych. Jeśli przekroczenia limitów czasu występują głównie u dostawców zewnętrznych, selektywnie zwiększam tam tolerancję lub ustawiam wyłącznik automatyczny. Czyste rozdzielenie przyspiesza analizę błędów i pozwala skupić się na części o największym wpływie. Dzięki temu cała platforma pozostaje odporna na pojedyncze słabe punkty.
Zadania długotrwałe: zadania, kolejki i cron
Zadania takie jak eksporty, kopie zapasowe, migracje i stosy obrazów powinny być wykonywane w procesach w tle, a nie w żądaniach frontendowych. Używam Queue-Worker lub skryptów CLI z dostosowanym Czas działania i oddzielnymi limitami, aby frontendy pozostały wolne. Zadania cron planuję w spokojnych przedziałach czasowych, aby nie kolidowały z ruchem na żywo. W celu zapewnienia tolerancji błędów stosuję strategie ponawiania prób z opóźnieniem zamiast sztywnych, stałych powtórzeń. Dzięki temu długie zadania działają niezawodnie, nie zakłócając przepływu użytkowników. przeszkadzać.
Jeśli jednak zadanie może trafić do sieci, stawiam na strumieniowe przesyłanie odpowiedzi i buforowanie wyników pośrednich. Wskaźniki postępu i przetwarzanie częściowe w partiach pozwalają uniknąć długich blokad. Jeśli mimo to sytuacja staje się napięta, tymczasowo zwiększam liczbę pracowników, a następnie ponownie obniżam ją do normalnego poziomu. Ta elastyczność pozwala obliczyć koszty i oszczędzać zasoby. Kluczowe znaczenie ma utrzymanie krótkich ścieżek krytycznych i wyeliminowanie trudnych przebiegów z drogi użytkownika. przenosić.
Aspekty bezpieczeństwa i tolerancja błędów przy wysokich limitach
Wyższe wartości wykonania wydłużają okno, w którym błędny kod wiąże zasoby. Zapewniam to poprzez sensowne Przerwania w kodzie, walidacji danych wejściowych i limitach dla wywołań zewnętrznych. Ograniczanie szybkości na wejściach API zapobiega zalewaniu długotrwałych procesów przez boty lub nadużyciom. Po stronie serwera ustawiam twarde limity procesów i pamięci, aby zatrzymać procesy typu runaway. Wielopoziomowa koncepcja ochrony ogranicza szkody, nawet jeśli pojedynczy Żądanie wykoleił się.
Strony błędów projektuję w sposób informacyjny i zwięzły, aby użytkownicy widzieli sensowne kroki zamiast tajemniczych komunikatów. Logi zapisuję w sposób uporządkowany i rotuję je, aby oszczędzać miejsce na dysku. Alerty wiążę z wartościami progowymi, które sygnalizują rzeczywiste problemy, a nie każdą drobnostkę. W ten sposób zespół szybko reaguje na rzeczywiste zdarzenia i pozostaje zdolny do działania w przypadku awarii. Dobra obserwowalność skraca czas do Przyczyna drastycznie.
Częste błędy dotyczące limitów
„Im wyższa wartość, tym lepiej“ nie jest prawdą, ponieważ zbyt długie skrypty blokują platformę. „Wszystko jest problemem procesora“ to zbytnie uproszczenie, ponieważ takt wyznaczają pamięć RAM, IO i usługi zewnętrzne. „OPcache wystarczy“ nie uwzględnia faktu, że opóźnienia bazy danych i sieci również mają znaczenie. „Tylko optymalizacja kodu“ pomija fakt, że konfiguracja i ustawienia hostingu mają taki sam efekt. Łączę refaktoryzację kodu, buforowanie i Konfiguracja, zamiast stawiać na jedną kartę.
Kolejny błąd w rozumowaniu: „Timeout oznacza uszkodzony serwer“. W rzeczywistości oznacza to zazwyczaj nieodpowiednie ograniczenia lub nieodpowiednie ścieżki. Czytając logi, można rozpoznać wzorce i naprawić odpowiednie miejsca. Dzięki temu zmniejsza się liczba błędów bez konieczności wymiany sprzętu. Jasna diagnoza pozwala zaoszczędzić Budżet i przyspiesza widoczne rezultaty.
Przykładowe konfiguracje i testy porównawcze: co sprawdza się w praktyce
Opieram się na typowych profilach obciążenia i dopasowuję je do budżetu pamięci RAM i równoległości. Poniższa tabela zawiera zestawienie popularnych kombinacji i pokazuje, jak wpływają one na czas odpowiedzi i stabilność. Wartości służą jako punkt wyjścia i muszą być dostosowane do ruchu, bazy kodu i usług zewnętrznych. Po wdrożeniu sprawdzam wskaźniki i stopniowo je udoskonalam. W ten sposób system pozostaje możliwy do zaplanowania i nie reaguje wrażliwie na fale obciążenia.
| Scenariusz operacyjny | Czas wykonania | Limit pamięci | Oczekiwany efekt | Ryzyko |
|---|---|---|---|---|
| Mała strona WP, niewiele wtyczek | 60–120 s | 128–256 MB | Stabilne aktualizacje, rzadkie przerwy w działaniu | Szczyty w Media‑Jobs |
| Blog/Corporate z Page Builder | 180–300 s | 256–512 MB | O połowę krótszy czas odpowiedzi, mniej przerw | Długie biegi przy słabej bazie danych |
| WooCommerce/Sklep | 300 s | 512 MB | Stabilne importy, kopie zapasowe, kanały | Wysoka pamięć RAM na pracownika |
| API/bezgłowe zaplecze | 30–120 s | 256–512 MB | Bardzo krótkie opóźnienia dzięki OPcache | Limity czasu dla wolnych partnerów |
Jeśli masz wiele jednoczesnych zapytań, powinieneś dodatkowo dostosować pulę PHP‑FPM i regularnie ją monitorować. Zwiększenie liczby procesów bez odpowiedniej ilości pamięci RAM pogłębia wąskie gardło. Oszczędne procesy z OPcache i pamięcią podręczną obiektów poprawiają przepustowość na rdzeń. Podsumowując, liczy się równowaga, a nie maksymalne wartości na pojedynczym regulatorze. Właśnie tutaj opłaca się uporządkowane podejście. Strojenie od.
Powiązane limity: max_input_time, request_terminate_timeout i limity czasu upstream
Oprócz max_execution_time, ważną rolę odgrywa kilka innych czynników: max_input_time ogranicza czas, jaki PHP ma na analizę danych wejściowych (POST, przesyłanie plików). Jeśli limit ten jest zbyt niski, duże formularze lub przesyłanie plików kończą się niepowodzeniem, zanim uruchomi się właściwy kod – całkowicie niezależnie od czasu wykonania. Na poziomie FPM kończy request_terminate_timeout zbyt długie żądania, nawet jeśli PHP nie osiągnęło jeszcze limitu wykonania. Serwery WWW i serwery proxy ustalają własne limity: Nginx (proxy_read_timeout/fastcgi_read_timeout), Apache (Timeout/ProxyTimeout) oraz load balancer/CDN przerywają odpowiedzi po upływie określonego czasu oczekiwania. W praktyce obowiązuje zasada: najmniejszy skuteczny limit czasu wygrywa. Utrzymuję tę łańcuch spójny, aby żadna niewidoczna zewnętrzna bariera nie zniekształcała diagnozy.
Szczególnie zdradliwe są usługi zewnętrzne: jeśli żądanie PHP oczekuje na API, o wyniku decyduje nie tylko czas wykonania, ale także konfiguracja klienta HTTP (limity czasu połączenia/odczytu). Jeśli nie ustalisz jasnych terminów, pracownicy będą niepotrzebnie zajęci przez długi czas. Dlatego dla każdej integracji definiuję krótkie limity czasu połączenia i odpowiedzi oraz zabezpieczam krytyczne ścieżki za pomocą polityki ponawiania prób i wyłącznika awaryjnego.
CLI kontra internet: inne zasady dotyczące zadań w tle
Procesy CLI zachowują się inaczej niż FPM: domyślnie max_execution_time w CLI często ustawiane na 0 (nieograniczone), co pamięć_limit nadal obowiązuje. W przypadku długich importów, kopii zapasowych lub migracji wybieram celowo CLI i ustawiam limity za pomocą parametrów:
php -d max_execution_time=0 -d memory_limit=512M bin/job.php
W ten sposób oddzielam obciążenie czasowe od żądań frontendowych. W WordPressie preferuję wykonywanie ciężkich zadań za pomocą WP-CLI, a Web-Cron używam tylko do uruchamiania krótkich, powtarzalnych zadań.
Co może kontrolować sam kod: set_time_limit, ini_set i przerwania
Aplikacje mogą podnosić ograniczenia w ramach specyfikacji serwera: set_time_limit() oraz ini_set(‚max_execution_time‘) działają na każde żądanie. Działa to tylko wtedy, gdy funkcje nie zostały wyłączone i nie obowiązuje niższy limit czasu FPM. Ponadto ustawiam wyraźne kryteria przerwania w pętlach, sprawdzam postęp i rejestruję etapy. ignore_user_abort(true) umożliwia zakończenie zadań pomimo przerwania połączenia klienta – przydatne w przypadku eksportów lub webhooków. Bez czystych zatrzymań takie „darmowe przejazdy” zagrażają jednak stabilności, dlatego pozostają one wyjątkiem z wyraźnymi zabezpieczeniami.
Planowanie wydajności: pm.max_children – obliczać zamiast zgadywać
Zamiast ślepo zwiększać pm.max_children, obliczam rzeczywiste zapotrzebowanie na pamięć. W tym celu mierzę średnią wartość RSS procesu FPM pod obciążeniem (np. poprzez ps lub smem) i zaplanuj rezerwę dla jądra/pamięci podręcznej. Proste przybliżenie:
dostępna_pamięć_RAM_dla_PHP = całkowita_pamięć_RAM - baza_danych - serwer_WWW - rezerwa_systemu_operacyjnego pm.max_children ≈ floor(dostępna_pamięć_RAM_dla_PHP / średnia_RSS_na_proces_PHP)
Ważne: pamięć_limit nie jest wartością RSS. Proces z limitem 256 MB zajmuje w zależności od przepływu pracy 80–220 MB rzeczywistej pamięci. Dlatego kalibruję za pomocą rzeczywistych pomiarów w wartości szczytowej. Jeśli średnia wartość RSS jest obniżana przez buforowanie i mniejsze obciążenie rozszerzeniami, w tej samej pamięci RAM zmieści się więcej procesów roboczych – często jest to skuteczniejsze niż surowe zwiększenie limitów.
Zależności zewnętrzne: świadome ustawianie limitów czasu
Większość „wiszących“ żądań PHP czeka na IO: bazę danych, system plików, HTTP. W przypadku baz danych definiuję jasne limity zapytań, strategie indeksowania i ramy transakcji. W przypadku klientów HTTP ustawiam krótkie limity czasu połączenia i odczytu i ograniczam liczbę ponownych prób do kilku, z wykładniczym opóźnieniem. W kodzie oddzielam wywołania zewnętrzne, buforując wyniki, równolegle przetwarzając je (tam, gdzie to możliwe) lub przenosząc do zadań. W ten sposób zmniejsza się prawdopodobieństwo, że jeden powolny partner zablokuje całą kolejkę FPM.
Batching i możliwość wznowienia: okiełznaj długie procesy
Długie operacje dzielę na jasno określone Partie (np. 200–1000 rekordów danych na przebieg) z punktami kontrolnymi. Skraca to czas poszczególnych żądań, ułatwia wznowienie pracy po wystąpieniu błędów i poprawia widoczność postępów. Praktyczne elementy składowe:
- Zapisywanie znacznika postępu (ostatni identyfikator/strona) w sposób trwały.
- Operacje idempotentne, aby tolerować podwójne przebiegi.
- Backpressure: dynamicznie zmniejszać wielkość partii, gdy wzrasta 95. percentyl.
- Odpowiedzi strumieniowe lub zdarzenia wysyłane przez serwer w celu uzyskania informacji zwrotnych na żywo podczas zadań administracyjnych.
W połączeniu z OPcache i pamięcią podręczną obiektów zapewnia to stabilny, przewidywalny czas działania, który pozostaje w realistycznych granicach, zamiast globalnie zwiększać czas wykonania.
FPM‑Slowlog i widoczność w przypadku błędu
Aby uzyskać prawdziwy wgląd, aktywuję FPM‑Slowlog (request_slowlog_timeout, ścieżka slowlog). Jeśli żądania pozostają aktywne dłużej niż wynosi próg, w dzienniku pojawia się ślad zwrotny – bardzo cenny w przypadku niejasnych zawieszeń. Równolegle status FPM (pm.status_path) dostarcza dane na żywo dotyczące aktywnych/bezczynnych procesów, kolejek i czasu trwania żądań. Koreluję te dane z logami dostępu (czas upstream, kody statusu) i logami spowolnień bazy danych, aby precyzyjnie zidentyfikować najwęższe miejsce.
Kontenery i maszyny wirtualne: Cgroups i OOM w skrócie
W kontenerach orkiestracja ogranicza procesor i pamięć RAM niezależnie od pliku php.ini. Jeśli proces działa blisko pamięć_limit, jądro może zakończyć działanie kontenera za pomocą OOM-killera pomimo „odpowiednich“ ustawień PHP. Dlatego utrzymuję dodatkową rezerwę poniżej limitu cgroup, obserwuję RSS zamiast tylko memory_limit i konserwatywnie dostosowuję rozmiary OPcache. W środowiskach o ograniczonej mocy obliczeniowej CPU wydłuża się czas działania – ten sam czas wykonania często nie jest już wystarczający. W tym przypadku bardziej pomocne jest profilowanie i ukierunkowana redukcja równoległości niż ogólne wydłużenie limitów czasu.
Wersje PHP, JIT i rozszerzenia: małe zmiany, duży efekt
Nowsze wersje PHP przynoszą zauważalne optymalizacje silnika. JIT rzadko przyspiesza typowe obciążenia sieciowe, natomiast OPcache prawie zawsze. Staram się, aby rozszerzenia były lekkie: każda dodatkowa biblioteka zwiększa zużycie pamięci i koszty zimnego startu. Dostosowuję realpath_cache_size i parametry OPcache (pamięć, strategia ponownej walidacji) do bazy kodu. Te szczegóły skracają udział procesora w każdym żądaniu, co przy stałych limitach czasowych bezpośrednio zapewnia większy margines bezpieczeństwa.
Rozpoznawanie błędów: krótka lista kontrolna
- Wiele błędów 504/502 pod obciążeniem: zbyt mało pracowników, powolna usługa zewnętrzna, limit czasu proxy mniejszy niż limit PHP.
- „Przekroczono maksymalny czas wykonania“ w dzienniku błędów: ścieżka kodu/zapytanie kosztowne lub zbyt krótki limit czasu – profilowanie i przetwarzanie wsadowe.
- RAM gwałtownie rośnie, swap wzrasta: pm.max_children zbyt wysokie lub Ø‑RSS niedoszacowane.
- Regularne przerwy w przesyłaniu plików/formularzy: zharmonizować max_input_time/post_max_size/Client‑Timeouts.
- Backend wolny, frontend ok: pamięć podręczna obiektów/OPcache w obszarach administracyjnych zbyt mała lub wyłączona.
Krótkie podsumowanie
Limity wykonania PHP określają szybkość przetwarzania zapytań i niezawodność strony w okresach szczytowego obciążenia. Ustawiam czas wykonania i Pamięć nigdy nie jest izolowane, ale dostosowane do procesora, FPM-Worker i buforowania. W przypadku WordPressa i sklepów internetowych 300 sekund i 256–512 MB to dobry początek, uzupełniony o OPcache i pamięć podręczną obiektów. Następnie dostosowuję na podstawie 95. percentyla, wskaźnika błędów i wykorzystania pamięci RAM, aż znikną wąskie gardła. Dzięki tej metodzie zmniejsza się Limity czasu, Strona pozostaje responsywna, a hosting pozostaje przewidywalny.


