{"id":16053,"date":"2025-12-20T11:51:36","date_gmt":"2025-12-20T10:51:36","guid":{"rendered":"https:\/\/webhosting.de\/php-fpm-prozess-management-pm-max-children-optimieren-core\/"},"modified":"2025-12-20T11:51:36","modified_gmt":"2025-12-20T10:51:36","slug":"php-fpm-zarzadzanie-procesami-pm-max-children-optymalizacja-rdzenia","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/php-fpm-prozess-management-pm-max-children-optimieren-core\/","title":{"rendered":"Prawid\u0142owa konfiguracja zarz\u0105dzania procesami PHP-FPM: wyja\u015bnienie pm.max_children &amp; Co."},"content":{"rendered":"<p><strong>Optymalizacja php-fpm<\/strong> decyduje, ile proces\u00f3w PHP-FPM mo\u017ce dzia\u0142a\u0107 jednocze\u015bnie, jak szybko uruchamiane s\u0105 nowe procesy i jak d\u0142ugo obs\u0142uguj\u0105 one zapytania. Poka\u017c\u0119 Ci, jak <strong>pm.max_children<\/strong>, pm, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers i pm.max_requests tak, aby Twoja aplikacja szybko reagowa\u0142a pod obci\u0105\u017ceniem, a serwer nie przechodzi\u0142 w tryb swappingu.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>tryb pm<\/strong>: wybierz w\u0142a\u015bciw\u0105 opcj\u0119 \u2013 statyczn\u0105, dynamiczn\u0105 lub na \u017c\u0105danie \u2013 aby procesy by\u0142y dostosowane do Twojego ruchu.<\/li>\n  <li><strong>pm.max_children<\/strong>: Dostosuj liczb\u0119 r\u00f3wnoczesnych proces\u00f3w PHP w pami\u0119ci RAM do rzeczywistego zu\u017cycia proces\u00f3w.<\/li>\n  <li><strong>Warto\u015bci pocz\u0105tkowe\/rezerwowe<\/strong>: pm.start_servers, pm.min_spare_servers, pm.max_spare_servers w rozs\u0105dny spos\u00f3b.<\/li>\n  <li><strong>Recykling<\/strong>: Zmniejsz wycieki pami\u0119ci za pomoc\u0105 pm.max_requests bez generowania niepotrzebnego obci\u0105\u017cenia.<\/li>\n  <li><strong>Monitoring<\/strong>: Obserwuj logi, status i pami\u0119\u0107 RAM, a nast\u0119pnie stopniowo dostosowuj ustawienia.<\/li>\n<\/ul>\n\n<h2>Dlaczego zarz\u0105dzanie procesami ma znaczenie<\/h2>\n\n<p>Kieruj\u0119 <strong>PHP-FPM<\/strong> wykonanie ka\u017cdego skryptu PHP jako osobnego procesu, a ka\u017cde r\u00f3wnoleg\u0142e zapytanie wymaga w\u0142asnego modu\u0142u roboczego. Bez odpowiednich limit\u00f3w zapytania blokuj\u0105 kolejki, co prowadzi do <strong>Limity czasu<\/strong> i b\u0142\u0119d\u00f3w. Je\u015bli ustawisz zbyt wysokie limity, pula proces\u00f3w zu\u017cyje ca\u0142\u0105 pami\u0119\u0107 operacyjn\u0105, a j\u0105dro zacznie <strong>swappen<\/strong>. Ta r\u00f3wnowaga nie jest zgadywank\u0105: opieram si\u0119 na rzeczywistych warto\u015bciach pomiarowych i zachowuj\u0119 margines bezpiecze\u0144stwa. Dzi\u0119ki temu op\u00f3\u017anienie pozostaje niskie, a przepustowo\u015b\u0107 stabilna, nawet gdy obci\u0105\u017cenie gwa\u0142townie wzrasta.<\/p>\n\n<p>Wa\u017cna jest dla mnie jasna <strong>warto\u015b\u0107 docelowa<\/strong>: Ile jednoczesnych wykona\u0144 PHP chc\u0119 umo\u017cliwi\u0107 bez wyczerpania pami\u0119ci RAM? Jednocze\u015bnie sprawdzam, czy w\u0105skie gard\u0142a wyst\u0119puj\u0105 raczej w <strong>Baza danych<\/strong>, w zewn\u0119trznych interfejsach API lub na serwerze internetowym. Tylko znaj\u0105c w\u0105skie gard\u0142o, mog\u0119 wybra\u0107 odpowiednie warto\u015bci dla pm, pm.max_children i innych. Zaczynam ostro\u017cnie, mierz\u0119, a nast\u0119pnie stopniowo zwi\u0119kszam warto\u015bci. W ten spos\u00f3b unikam twardych restart\u00f3w i nieoczekiwanych awarii.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-fpm-serveradmin-4912.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Trzy tryby pm: static, dynamic, ondemand<\/h2>\n\n<p>Tryb <strong>statyczny<\/strong> zawsze utrzymuje dok\u0142adnie pm.max_children proces\u00f3w. Zapewnia to bardzo przewidywalne op\u00f3\u017anienia, poniewa\u017c nie jest wymagany \u017caden proces uruchamiania. U\u017cywam static, gdy obci\u0105\u017cenie jest bardzo r\u00f3wnomierne i dost\u0119pna jest wystarczaj\u0105ca ilo\u015b\u0107 pami\u0119ci RAM. Jednak w przypadku zmiennego zapotrzebowania static powoduje niewielkie straty. <strong>Pami\u0119\u0107<\/strong>. Dlatego stosuj\u0119 static celowo tam, gdzie potrzebuj\u0119 sta\u0142ego wykonania.<\/p>\n\n<p>Z <strong>dynamiczny<\/strong> uruchamiam ilo\u015b\u0107 startow\u0105 i pozwalam, aby rozmiar puli waha\u0142 si\u0119 mi\u0119dzy min_spare a max_spare. Tryb ten nadaje si\u0119 do ruchu o charakterze falowym, poniewa\u017c pracownicy s\u0105 tworzeni i likwidowani w zale\u017cno\u015bci od potrzeb. Zawsze utrzymuj\u0119 wystarczaj\u0105c\u0105 liczb\u0119 proces\u00f3w bezczynnych, aby bez czekania obs\u0142ugiwa\u0107 szczyty. Zbyt du\u017ca liczba bezczynnych pracownik\u00f3w powoduje jednak niepotrzebne obci\u0105\u017cenie. <strong>RAM<\/strong>, dlatego staram si\u0119 utrzymywa\u0107 niewielki margines bezpiecze\u0144stwa. Dzi\u0119ki temu pula pozostaje elastyczna, nie ulegaj\u0105c nadmiernemu rozszerzeniu.<\/p>\n\n<p>W trybie <strong>na \u017c\u0105danie<\/strong> Na pocz\u0105tku nie ma \u017cadnych proces\u00f3w roboczych, PHP-FPM uruchamia je dopiero po otrzymaniu zapytania. Pozwala to zaoszcz\u0119dzi\u0107 pami\u0119\u0107 w okresach bezczynno\u015bci, ale pierwsze trafienie wi\u0105\u017ce si\u0119 z pewnym op\u00f3\u017anieniem. Wybieram opcj\u0119 ondemand dla rzadko wywo\u0142ywanych pul, narz\u0119dzi administracyjnych lub punkt\u00f3w ko\u0144cowych cron. W przypadku cz\u0119sto odwiedzanych stron internetowych opcja ondemand zazwyczaj zapewnia gorszy czas reakcji. W takich przypadkach zdecydowanie preferuj\u0119 opcj\u0119 dynamic z odpowiednio ustawionymi warto\u015bciami rezerwowymi.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/phpfpm_konfiguration_9542.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Prawid\u0142owe wymiarowanie pm.max_children<\/h2>\n\n<p>My\u015bl\u0119, \u017ce <strong>pm.max_children<\/strong> z dost\u0119pnej pami\u0119ci RAM dla PHP i \u015bredniej pami\u0119ci na pracownika. W tym celu najpierw rezerwuj\u0119 pami\u0119\u0107 dla systemu, serwera WWW, bazy danych i pami\u0119ci podr\u0119cznej, aby system nie wpad\u0142 w <strong>Outsourcing<\/strong> dzia\u0142a. Pozosta\u0142\u0105 pami\u0119\u0107 RAM dziel\u0119 przez rzeczywiste zu\u017cycie procesora. Z teorii odejmuj\u0119 20\u201330 % margines bezpiecze\u0144stwa, aby wyeliminowa\u0107 warto\u015bci odstaj\u0105ce i szczyty obci\u0105\u017cenia. Wynik wykorzystuj\u0119 jako warto\u015b\u0107 pocz\u0105tkow\u0105, a nast\u0119pnie obserwuj\u0119 efekt.<\/p>\n\n<p>\u015arednie zu\u017cycie procesu ustalam za pomoc\u0105 narz\u0119dzi takich jak <strong>ps<\/strong>, top lub htop i sprawdzam RSS\/RES. Wa\u017cne: mierz\u0119 pod typowym obci\u0105\u017ceniem, a nie w stanie spoczynku. Gdy \u0142aduj\u0119 wiele wtyczek, framework\u00f3w lub du\u017cych bibliotek, zu\u017cycie na ka\u017cdy worker wyra\u017anie ro\u015bnie. Ponadto procesor ogranicza krzyw\u0105: wi\u0119cej proces\u00f3w nie pomaga, gdy <strong>Jednow\u0105tkowy<\/strong>-Wydajno\u015b\u0107 procesora ograniczona na ka\u017cde zapytanie. Osoby zainteresowane bardziej szczeg\u00f3\u0142owymi informacjami na temat charakterystyki procesora znajd\u0105 dodatkowe informacje na stronie <a href=\"https:\/\/webhosting.de\/pl\/php-wydajnosc-jednowatkowa-wordpress-hosting-velocity\/\">Wydajno\u015b\u0107 pojedynczego w\u0105tku<\/a>.<\/p>\n\n<p>Moje za\u0142o\u017cenia s\u0105 przejrzyste: ile pami\u0119ci RAM jest faktycznie dost\u0119pne dla PHP? Jak du\u017ce s\u0105 typowe \u017c\u0105dania? Jakie s\u0105 warto\u015bci szczytowe? Je\u015bli odpowiedzi s\u0105 prawid\u0142owe, ustawiam pm.max_children, wykonuj\u0119 \u0142agodne ponowne \u0142adowanie i sprawdzam pami\u0119\u0107 RAM, czasy odpowiedzi oraz wska\u017aniki b\u0142\u0119d\u00f3w. Dopiero potem przechodz\u0119 ma\u0142ymi krokami do wy\u017cszych lub ni\u017cszych warto\u015bci.<\/p>\n\n<h2>Warto\u015bci orientacyjne wed\u0142ug wielko\u015bci serwera<\/h2>\n\n<p>Poni\u017csza tabela pokazuje mi <strong>Warto\u015bci pocz\u0105tkowe<\/strong> . Nie zast\u0119puje ona pomiar\u00f3w, ale zapewnia solidn\u0105 orientacj\u0119 dla wst\u0119pnych ustawie\u0144. Dostosowuj\u0119 warto\u015bci do poszczeg\u00f3lnych zastosowa\u0144 i sprawdzam je za pomoc\u0105 monitorowania. Je\u015bli rezerwy pozostaj\u0105 niewykorzystane, ostro\u017cnie je zwi\u0119kszam. Je\u015bli serwer osi\u0105ga limit pami\u0119ci RAM, zmniejszam warto\u015bci.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>Pami\u0119\u0107 RAM serwera<\/strong><\/th>\n      <th><strong>Pami\u0119\u0107 RAM dla PHP<\/strong><\/th>\n      <th><strong>\u00d8 MB\/pracownik<\/strong><\/th>\n      <th><strong>pm.max_children<\/strong> (Start)<\/th>\n      <th><strong>U\u017cycie<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>1\u20132 GB<\/td>\n      <td>~1 GB<\/td>\n      <td>50\u201360<\/td>\n      <td>15\u201320<\/td>\n      <td>Ma\u0142e strony internetowe, blogi<\/td>\n    <\/tr>\n    <tr>\n      <td>4\u20138 GB<\/td>\n      <td>~4\u20136 GB<\/td>\n      <td>60\u201380<\/td>\n      <td>30\u201380<\/td>\n      <td>Biznes, ma\u0142e sklepy<\/td>\n    <\/tr>\n    <tr>\n      <td>16+ GB<\/td>\n      <td>~10\u201312 GB<\/td>\n      <td>70\u201390<\/td>\n      <td>100\u2013160<\/td>\n      <td>Wysokie obci\u0105\u017cenie, API, sklepy<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Czytam tabel\u0119 od prawej do lewej: Czy pasuje <strong>U\u017cycie<\/strong> W ramach projektu sprawdzam, czy pami\u0119\u0107 RAM jest realistycznie zarezerwowana dla PHP. Nast\u0119pnie wybieram rozmiar procesora, kt\u00f3ry pasuje do bazy kodu i rozszerze\u0144. Nast\u0119pnie ustawiam pm.max_children i obserwuj\u0119 efekt w czasie rzeczywistym. Skuteczno\u015b\u0107 i stabilno\u015b\u0107 wzrastaj\u0105, gdy dok\u0142adnie dokumentuj\u0119 te kroki.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-fpm-prozessmanagement-5124.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ustawianie warto\u015bci startowych, rezerwowych i \u017c\u0105da\u0144<\/h2>\n\n<p>Z <strong>pm.start_servers<\/strong> Okre\u015blam, ile proces\u00f3w ma by\u0107 natychmiast gotowych. Zbyt niska warto\u015b\u0107 powoduje zimne starty pod obci\u0105\u017ceniem, zbyt wysoka niepotrzebnie zajmuje pami\u0119\u0107 RAM. Cz\u0119sto kieruj\u0119 si\u0119 warto\u015bci\u0105 15\u201330 % z pm.max_children i zaokr\u0105glam, je\u015bli obci\u0105\u017cenie zaczyna si\u0119 raczej spokojnie. W przypadku szczyt\u00f3w ruchu wybieram nieco wy\u017csz\u0105 warto\u015b\u0107 pocz\u0105tkow\u0105, aby zapytania nie nap\u0142ywa\u0142y, zanim wystarczaj\u0105ca liczba pracownik\u00f3w b\u0119dzie gotowa do pracy. Ta precyzyjna regulacja znacznie skraca czas pierwszej odpowiedzi.<\/p>\n\n<p>Warto\u015bci <strong>pm.min_spare_servers<\/strong> i pm.max_spare_servers definiuj\u0105 zakres bezczynno\u015bci. Zarezerwowa\u0142em tyle wolnych proces\u00f3w, aby nowe \u017c\u0105dania mia\u0142y bezpo\u015bredni dost\u0119p, ale nie tak du\u017co, aby procesy bezczynno\u015bci marnowa\u0142y pami\u0119\u0107. W przypadku sklep\u00f3w internetowych lubi\u0119 stosowa\u0107 w\u0119\u017csze okno, aby wyr\u00f3wna\u0107 szczyty. Dzi\u0119ki <strong>pm.max_requests<\/strong> Recyklinguj\u0119 procesy po kilkuset \u017c\u0105daniach, aby ograniczy\u0107 dryft pami\u0119ci. W przypadku niepozornych aplikacji wybieram 500\u2013800, a w przypadku podejrzenia wyciek\u00f3w celowo wybieram mniejsz\u0105 warto\u015b\u0107.<\/p>\n\n<h2>Monitorowanie i rozwi\u0105zywanie problem\u00f3w<\/h2>\n\n<p>Regularnie sprawdzam <strong>Dzienniki<\/strong>, strony statusowe i pami\u0119\u0107 RAM. Ostrze\u017cenia dotycz\u0105ce osi\u0105gni\u0119cia limit\u00f3w pm.max_children s\u0105 dla mnie wyra\u017anym sygna\u0142em, aby podnie\u015b\u0107 g\u00f3rn\u0105 granic\u0119 lub zoptymalizowa\u0107 kod\/baz\u0119 danych. Je\u015bli pojawiaj\u0105 si\u0119 cz\u0119ste b\u0142\u0119dy 502\/504, sprawdzam logi serwera WWW i kolejki. Znaczne wahania op\u00f3\u017anie\u0144 wskazuj\u0105 na zbyt ma\u0142\u0105 liczb\u0119 proces\u00f3w, blokuj\u0105ce operacje wej\u015bcia\/wyj\u015bcia lub zbyt wysokie koszty proces\u00f3w. Najpierw sprawdzam twarde fakty, a nast\u0119pnie reaguj\u0119 ma\u0142ymi krokami, nigdy nie podejmuj\u0105c radykalnych dzia\u0142a\u0144.<\/p>\n\n<p>Szybciej dostrzegam w\u0105skie gard\u0142a, gdy <strong>Czas oczekiwania<\/strong> mierz\u0119 wzd\u0142u\u017c ca\u0142ego \u0142a\u0144cucha: serwer WWW, PHP-FPM, baza danych, us\u0142ugi zewn\u0119trzne. Je\u015bli czas backendu wzrasta tylko w przypadku okre\u015blonych tras, izoluj\u0119 przyczyny za pomoc\u0105 profilowania. Je\u015bli czasy oczekiwania wyst\u0119puj\u0105 wsz\u0119dzie, zajmuj\u0119 si\u0119 rozmiarem serwera i puli. Pomocne jest r\u00f3wnie\u017c przyjrzenie si\u0119 kolejkom pracownik\u00f3w i procesom w stanie D. Dopiero gdy zrozumiem sytuacj\u0119, zmieniam limity \u2013 i dok\u0142adnie dokumentuj\u0119 ka\u017cd\u0105 zmian\u0119.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/phpfpm_nachtarbeit_tech5982.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wsp\u00f3\u0142praca serwera WWW i PHP-FPM<\/h2>\n\n<p>Upewniam si\u0119, \u017ce <strong>Serwer sieciowy<\/strong>-Limity i PHP-FPM wsp\u00f3\u0142graj\u0105 ze sob\u0105. Zbyt wiele jednoczesnych po\u0142\u0105cze\u0144 na serwerze WWW przy zbyt ma\u0142ej liczbie pracownik\u00f3w powoduje kolejki i przekroczenia limit\u00f3w czasu. Je\u015bli liczba pracownik\u00f3w jest wysoka, ale serwer WWW ogranicza przyjmowanie po\u0142\u0105cze\u0144, wydajno\u015b\u0107 pozostaje na niskim poziomie. Parametry takie jak worker_connections, event-Loop i Keep-Alive maj\u0105 bezpo\u015bredni wp\u0142yw na obci\u0105\u017cenie PHP. Praktyczne wprowadzenie do precyzyjnego dostrajania zapewniaj\u0105 wskaz\u00f3wki dotycz\u0105ce <a href=\"https:\/\/webhosting.de\/pl\/threadpool-serwer-www-apache-nginx-litespeed-optymalizacja-konfiguracja\/\">Pule w\u0105tk\u00f3w w serwerze WWW<\/a>.<\/p>\n\n<p>Zatrzymam <strong>Keep-Alive<\/strong>-Okno czasowe w widoku, aby po\u0142\u0105czenia bezczynne nie blokowa\u0142y niepotrzebnie pracownik\u00f3w. W przypadku zasob\u00f3w statycznych stosuj\u0119 agresywne buforowanie przed PHP, aby utrzyma\u0107 obci\u0105\u017cenie z dala od puli. Pami\u0119ci podr\u0119czne odwrotnego proxy dodatkowo pomagaj\u0105, gdy identyczne odpowiedzi s\u0105 cz\u0119sto wywo\u0142ywane. Dzi\u0119ki temu mog\u0119 utrzyma\u0107 pm.max_children na ni\u017cszym poziomie i nadal dostarcza\u0107 szybciej. Mniejsza ilo\u015b\u0107 pracy na \u017c\u0105danie jest cz\u0119sto najskuteczniejszym czynnikiem regulacyjnym.<\/p>\n\n<h2>Precyzyjne \u015bruby regulacyjne w php-fpm.conf<\/h2>\n\n<p>Wychodz\u0119 poza podstawowe warto\u015bci i dostosowuj\u0119 <strong>Parametry basenu<\/strong> dobrze. Z <strong>pm.max_spawn_rate<\/strong> ograniczam szybko\u015b\u0107 tworzenia nowych proces\u00f3w roboczych, aby serwer nie uruchamia\u0142 zbyt agresywnie proces\u00f3w w momentach szczytowego obci\u0105\u017cenia i nie popada\u0142 w thrashing procesora. Dla ondemand ustawiam <strong>pm.process_idle_timeout<\/strong> okre\u015blono, jak szybko nieu\u017cywane procesy znikaj\u0105 \u2013 zbyt kr\u00f3tki czas powoduje obci\u0105\u017cenie startowe, zbyt d\u0142ugi zajmuje pami\u0119\u0107 RAM. W przypadku <strong>s\u0142ucha\u0107<\/strong>-Socket wybieram mi\u0119dzy Unix-Socket a TCP. Unix-Socket zmniejsza obci\u0105\u017cenie i zapewnia przejrzyst\u0105 przypisanie praw za pomoc\u0105 <em>listen.owner<\/em>, <em>listen.group<\/em> oraz <em>listen.mode<\/em>. Dla obu wariant\u00f3w ustawiam <strong>listen.backlog<\/strong> wystarczaj\u0105co wysoka, aby nadchodz\u0105ce pakiety trafia\u0142y do bufora j\u0105dra, zamiast by\u0107 natychmiast odrzucane. Dzi\u0119ki <strong>rlimit_files<\/strong> W razie potrzeby zwi\u0119kszam liczb\u0119 otwartych plik\u00f3w na ka\u017cdego pracownika, co zapewnia stabilno\u015b\u0107 przy wielu r\u00f3wnoczesnych operacjach pobierania i wysy\u0142ania danych. A je\u015bli potrzebne s\u0105 priorytety, u\u017cywam <strong>priorytet procesu<\/strong>, aby nieco mniej krytyczne pule by\u0142y traktowane nieco mniej priorytetowo po stronie procesora.<\/p>\n\n<h2>Slowlog i ochrona przed zawieszaniem si\u0119 systemu<\/h2>\n\n<p>Aby wy\u015bwietli\u0107 trudne \u017c\u0105dania, aktywuj\u0119 <strong>Slowlog<\/strong>. Z <strong>request_slowlog_timeout<\/strong> definiuj\u0119 pr\u00f3g (np. 2\u20133 s), od kt\u00f3rego \u015blad stosu jest zapisywany w <strong>slowlog<\/strong> jest zapisywane. W ten spos\u00f3b znajduj\u0119 blokuj\u0105ce operacje wej\u015bcia\/wyj\u015bcia, kosztowne p\u0119tle lub nieoczekiwane blokady. W przypadku prawdziwych zawiesze\u0144 stosuj\u0119 <strong>request_terminate_timeout<\/strong>, kt\u00f3re gwa\u0142townie si\u0119 przerywa, gdy \u017c\u0105danie trwa zbyt d\u0142ugo. Uwa\u017cam, \u017ce te przedzia\u0142y czasowe s\u0105 zgodne z <em>max_execution_time<\/em> z PHP i limit\u00f3w czasu serwera WWW, aby jedna warstwa nie zosta\u0142a przerwana wcze\u015bniej ni\u017c druga. W praktyce zaczynam ostro\u017cnie, analizuj\u0119 logi spowolnie\u0144 pod obci\u0105\u017ceniem i stopniowo dostosowuj\u0119 progi, a\u017c sygna\u0142y b\u0119d\u0105 miarodajne, nie powoduj\u0105c zalewania log\u00f3w.<\/p>\n\n<h2>Opcache, memory_limit i ich wp\u0142yw na rozmiar worker\u00f3w<\/h2>\n\n<p>Odnosz\u0119 si\u0119 do <strong>Opcache<\/strong> do mojego planowania pami\u0119ci RAM. Jego obszar pami\u0119ci wsp\u00f3\u0142dzielonej nie jest liczony na pracownika, ale jest wsp\u00f3lnie wykorzystywany przez wszystkie procesy. Wielko\u015b\u0107 i fragmentacja (<em>opcache.memory_consumption<\/em>, <em>interned_strings_buffer<\/em>) maj\u0105 znacz\u0105cy wp\u0142yw na czas rozgrzewania i wsp\u00f3\u0142czynnik trafie\u0144. Dobrze skalowany Opcache zmniejsza obci\u0105\u017cenie procesora i pami\u0119ci RAM na ka\u017cde zapytanie, poniewa\u017c mniej kodu jest ponownie kompilowane. Jednocze\u015bnie zwracam uwag\u0119 na <strong>pami\u0119\u0107_limit<\/strong>: Wysoka warto\u015b\u0107 chroni przed brakiem pami\u0119ci w pojedynczych przypadkach, ale zwi\u0119ksza teoretyczny bud\u017cet w najgorszym przypadku na ka\u017cdego pracownika. Dlatego planuj\u0119 z uwzgl\u0119dnieniem \u015bredniej warto\u015bci pomiarowej plus bufor, a nie samej warto\u015bci memory_limit. Funkcje takie jak wst\u0119pne \u0142adowanie lub JIT zwi\u0119kszaj\u0105 zapotrzebowanie na pami\u0119\u0107 \u2013 testuj\u0119 je celowo i uwzgl\u0119dniam dodatkowe zu\u017cycie w obliczeniach pm.max_children.<\/p>\n\n<h2>Rozdzielanie i ustalanie priorytet\u00f3w pul<\/h2>\n\n<p>Dziel\u0119 aplikacje na <strong>kilka basen\u00f3w<\/strong> gdy profile obci\u0105\u017cenia znacznie si\u0119 r\u00f3\u017cni\u0105. Jedna pula dla ruchu frontendowego, jedna dla administracji\/backendu, trzecia dla cron\/przesy\u0142ania plik\u00f3w: w ten spos\u00f3b izoluj\u0119 szczyty i przypisuj\u0119 zr\u00f3\u017cnicowane limity. Dla rzadko odwiedzanych punkt\u00f3w ko\u0144cowych ustawiam <em>na \u017c\u0105danie<\/em> z kr\u00f3tkim czasem bezczynno\u015bci dla interfejsu u\u017cytkownika <em>dynamiczny<\/em> z niewielkim marginesem bezpiecze\u0144stwa. O <strong>u\u017cytkownik\/grupa<\/strong> i w razie potrzeby. <em>chroot<\/em> Dbam o czyst\u0105 izolacj\u0119, podczas gdy uprawnienia gniazda reguluj\u0105, kt\u00f3ry proces serwera WWW ma dost\u0119p. Tam, gdzie wymagane s\u0105 priorytety, frontend otrzymuje wi\u0119cej <em>pm.max_children<\/em> i ewentualnie neutraln\u0105 <em>priorytet procesu<\/em>, podczas gdy Cron\/Reports dzia\u0142aj\u0105 przy mniejszym bud\u017cecie i ni\u017cszym priorytecie. Dzi\u0119ki temu interfejs u\u017cytkownika pozostaje responsywny, nawet je\u015bli w tle dzia\u0142aj\u0105 ci\u0119\u017ckie zadania.<\/p>\n\n<h2>Prawid\u0142owe wykorzystanie punkt\u00f3w ko\u0144cowych statusu<\/h2>\n\n<p>W celu przeprowadzenia diagnostyki dzia\u0142ania aktywuj\u0119 <strong>pm.status_path<\/strong> i opcjonalnie <strong>ping.path<\/strong> na pulpit. W statusie widz\u0119 Active\/Idle-Worker, kt\u00f3re <em>Kolejka list<\/em>, liczniki przepustowo\u015bci i metryki powolnych \u017c\u0105da\u0144. Stale rosn\u0105ca kolejka list lub ci\u0105gle 0 bezczynnych pracownik\u00f3w s\u0105 dla mnie sygna\u0142ami alarmowymi. Chroni\u0119 te punkty ko\u0144cowe za pomoc\u0105 uwierzytelniania i sieci wewn\u0119trznej, aby \u017cadne szczeg\u00f3\u0142y operacyjne nie przedosta\u0142y si\u0119 na zewn\u0105trz. Dodatkowo aktywuj\u0119 <strong>catch_workers_output<\/strong>, gdy chc\u0119 w kr\u00f3tkim czasie zebra\u0107 stdout\/stderr z worker\u00f3w \u2013 na przyk\u0142ad w przypadku trudnych do odtworzenia b\u0142\u0119d\u00f3w. Sygna\u0142y te \u0142\u0105cz\u0119 z metrykami systemowymi (RAM, CPU, I\/O), aby zdecydowa\u0107, czy zwi\u0119kszy\u0107 pm.max_children, dostosowa\u0107 warto\u015bci rezerwowe, czy te\u017c zaj\u0105\u0107 si\u0119 aplikacj\u0105.<\/p>\n\n<h2>Cechy szczeg\u00f3lne kontener\u00f3w i maszyn wirtualnych<\/h2>\n\n<p>Na stronie <strong>kontenerowanie<\/strong> W przypadku ma\u0142ych maszyn wirtualnych zwracam uwag\u0119 na limity cgroup i ryzyko wyst\u0105pienia OOM-killera. Ustawiam pm.max_children \u015bci\u015ble zgodnie z <em>Limit pami\u0119ci kontenera<\/em> i testuj\u0119 szczyty obci\u0105\u017cenia, aby \u017caden pracownik nie zosta\u0142 wy\u0142\u0105czony. Bez swapowania w kontenerach margines bezpiecze\u0144stwa jest szczeg\u00f3lnie wa\u017cny. W przypadku limit\u00f3w CPU skaluj\u0119 liczb\u0119 pracownik\u00f3w do dost\u0119pnej liczby vCPU: je\u015bli aplikacja jest ograniczona przez CPU, wi\u0119ksza r\u00f3wnoleg\u0142o\u015b\u0107 powoduje raczej kolejki ni\u017c przepustowo\u015b\u0107. Obci\u0105\u017cenia ograniczone przez IO toleruj\u0105 wi\u0119cej proces\u00f3w, o ile wystarcza pami\u0119\u0107 RAM. Dodatkowo ustawiam <strong>emergency_restart_threshold<\/strong> oraz <strong>emergency_restart_interval<\/strong> dla procesu g\u0142\u00f3wnego, aby zapobiec spirali awarii w przypadku, gdy rzadki b\u0142\u0105d spowoduje awari\u0119 kilku proces\u00f3w potomnych w kr\u00f3tkim czasie. Dzi\u0119ki temu us\u0142uga pozostaje dost\u0119pna, podczas gdy ja analizuj\u0119 przyczyn\u0119.<\/p>\n\n<h2>P\u0142ynne wdro\u017cenia i ponowne \u0142adowanie bez przestoj\u00f3w<\/h2>\n\n<p>Planuj\u0119 <strong>Ponowne \u0142adowanie<\/strong> tak, aby bie\u017c\u0105ce \u017c\u0105dania by\u0142y poprawnie realizowane. A <em>elegantne ponowne \u0142adowanie<\/em> (np. poprzez systemd reload) przejmuje nowe konfiguracje bez gwa\u0142townego zamykania otwartych po\u0142\u0105cze\u0144. Utrzymuj\u0119 \u015bcie\u017ck\u0119 gniazda stabiln\u0105, aby serwer WWW nie widzia\u0142 przerwania po\u0142\u0105czenia. W przypadku zmian wersji, kt\u00f3re uniewa\u017cniaj\u0105 wiele Opcache, podgrzewam pami\u0119\u0107 podr\u0119czn\u0105 (preloading\/warmup-requests), aby ograniczy\u0107 szczyty op\u00f3\u017anie\u0144 bezpo\u015brednio po wdro\u017ceniu. Wi\u0119ksze zmiany testuj\u0119 najpierw na mniejszej puli lub w instancji Canary o identycznej konfiguracji, zanim wprowadz\u0119 zmiany na szerok\u0105 skal\u0119. Ka\u017cda zmiana trafia do mojego dziennika zmian wraz z sygnatur\u0105 czasow\u0105 i zrzutami ekranu z metrykami \u2013 skraca to czas wyszukiwania b\u0142\u0119d\u00f3w w przypadku wyst\u0105pienia nieoczekiwanych skutk\u00f3w ubocznych.<\/p>\n\n<h2>Zachowanie podczas przep\u0142ywu danych i kolejki<\/h2>\n\n<p>Szczyty obci\u0105\u017cenia kompensuj\u0119 za pomoc\u0105 odpowiednio dobranego <strong>Projekt kolejki<\/strong> ab. Stawiam <strong>listen.backlog<\/strong> tak wysoka, \u017ce j\u0105dro mo\u017ce kr\u00f3tkotrwale buforowa\u0107 wi\u0119cej pr\u00f3b po\u0142\u0105cze\u0144. Po stronie serwera WWW ograniczam maksymaln\u0105 liczb\u0119 jednoczesnych po\u0142\u0105cze\u0144 FastCGI na pul\u0119, tak aby wynosi\u0142a ona <em>pm.max_children<\/em> pasuje. Dzi\u0119ki temu bursty wol\u0105 gromadzi\u0107 si\u0119 kr\u00f3tkotrwale na serwerze internetowym (korzystne), ni\u017c g\u0142\u0119boko w PHP (kosztowne). Mierz\u0119 <em>Kolejka list<\/em> w statusie FPM: je\u015bli wzrasta regularnie, zwi\u0119kszam liczb\u0119 pracownik\u00f3w, optymalizuj\u0119 wsp\u00f3\u0142czynniki trafie\u0144 pami\u0119ci podr\u0119cznej lub obni\u017cam agresywne warto\u015bci Keep-Alive. Celem jest, aby w przypadku szczyt\u00f3w <em>Czas do pierwszego bajtu<\/em> utrzymywa\u0107 stabilno\u015b\u0107 zamiast pozostawia\u0107 \u017c\u0105dania w nieko\u0144cz\u0105cych si\u0119 kolejkach.<\/p>\n\n<h2>Praktyczny przebieg pracy przy dopasowywaniu<\/h2>\n\n<p>Zaczynam od <strong>Audyt<\/strong>: bud\u017cet pami\u0119ci RAM, rozmiar procesu, profile wej\u015bcia\/wyj\u015bcia. Nast\u0119pnie ustawiam konserwatywne warto\u015bci pocz\u0105tkowe dla pm.max_children i trybu pm. Potem przeprowadzam testy obci\u0105\u017cenia lub obserwuj\u0119 rzeczywiste godziny szczytu. Rejestruj\u0119 wszystkie zmiany wraz z metrykami i przedzia\u0142ami czasowymi. Po ka\u017cdej regulacji sprawdzam pami\u0119\u0107 RAM, op\u00f3\u017anienie P50\/P95 i wska\u017aniki b\u0142\u0119d\u00f3w \u2013 dopiero wtedy przechodz\u0119 do nast\u0119pnego kroku.<\/p>\n\n<p>Kiedy wielokrotnie osi\u0105gam granic\u0119 wytrzyma\u0142o\u015bci, nie eskaluj\u0119 od razu sytuacji. <strong>Pracownik<\/strong>-Liczba. Najpierw optymalizuj\u0119 zapytania, wsp\u00f3\u0142czynniki trafie\u0144 w pami\u0119ci podr\u0119cznej i kosztowne funkcje. Przenosz\u0119 zadania obci\u0105\u017caj\u0105ce IO do kolejek i skracam \u015bcie\u017cki odpowiedzi. Dopiero gdy aplikacja dzia\u0142a wydajnie, zwi\u0119kszam rozmiar puli. Ten proces oszcz\u0119dza zasoby i pozwala unikn\u0105\u0107 szk\u00f3d w innych obszarach.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/phpfpm_schreibtisch_7321.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Typowe scenariusze: przyk\u0142adowe warto\u015bci<\/h2>\n\n<p>Na serwerze wirtualnym o pojemno\u015bci 2 GB rezerwuj\u0119 oko\u0142o <strong>1 GB<\/strong> dla PHP-FPM i ustaw zu\u017cycie pracownika na oko\u0142o 50\u201360 MB. W ten spos\u00f3b zaczynam od pm.max_children oko\u0142o 15\u201320 i u\u017cywam dynamic z ma\u0142\u0105 ilo\u015bci\u0105 pocz\u0105tkow\u0105. min_spare utrzymuj\u0119 na poziomie 2\u20133, max_spare na poziomie 5\u20136. pm.max_requests ustawiam na 500, aby procesy by\u0142y regularnie wymieniane. Te ustawienia zapewniaj\u0105 stabilny czas reakcji w przypadku ma\u0142ych projekt\u00f3w.<\/p>\n\n<p>Przy 8 GB pami\u0119ci RAM zazwyczaj planuj\u0119 4\u20136 GB dla <strong>PHP<\/strong> i ustawiam rozmiar proces\u00f3w roboczych na 60\u201380 MB. Daje to 30\u201380 proces\u00f3w potomnych jako zakres startowy. pm.start_servers wynosi 15\u201320, min_spare 10\u201315, a max_spare 25\u201330. pm.max_requests wybieram mi\u0119dzy 500 a 800. Pod obci\u0105\u017ceniem sprawdzam, czy szczyt pami\u0119ci RAM pozostawia margines, a nast\u0119pnie ostro\u017cnie zwi\u0119kszam warto\u015b\u0107.<\/p>\n\n<p>W konfiguracjach o wysokim obci\u0105\u017ceniu z 16+ GB pami\u0119ci RAM rezerwuj\u0119 10\u201312 GB dla <strong>FPM<\/strong>. Przy 70\u201390 MB na pracownika szybko osi\u0105gam 100\u2013160 proces\u00f3w. To, czy sensowne jest zastosowanie trybu statycznego czy dynamicznego, zale\u017cy od rodzaju obci\u0105\u017cenia. W przypadku stale wysokiego obci\u0105\u017cenia przekonuj\u0105cy jest tryb statyczny, a w przypadku falowego zapotrzebowania \u2013 tryb dynamiczny. W obu przypadkach konieczne jest konsekwentne monitorowanie.<\/p>\n\n<h2>Unikanie przeszk\u00f3d i ustalanie priorytet\u00f3w<\/h2>\n\n<p>Nie myl\u0119 liczby <strong>Odwiedzaj\u0105cy<\/strong> z liczb\u0105 jednoczesnych skrypt\u00f3w PHP. Wiele wywo\u0142a\u0144 stron trafia do pami\u0119ci podr\u0119cznej, dostarcza pliki statyczne lub blokuje si\u0119 poza PHP. Dlatego wymiaruj\u0119 pm.max_children wed\u0142ug zmierzonego czasu PHP, a nie wed\u0142ug sesji. Je\u015bli procesy s\u0105 ustawione zbyt oszcz\u0119dnie, widz\u0119 oczekuj\u0105ce \u017c\u0105dania i rosn\u0105c\u0105 liczb\u0119 b\u0142\u0119d\u00f3w. Przy zbyt wysokich warto\u015bciach pami\u0119\u0107 przechodzi do pami\u0119ci wymiany i wszystko zwalnia.<\/p>\n\n<p>Cz\u0119sty b\u0142\u0105d: wi\u0119cej proces\u00f3w oznacza wi\u0119cej <strong>Pr\u0119dko\u015b\u0107<\/strong>. W rzeczywisto\u015bci liczy si\u0119 r\u00f3wnowaga mi\u0119dzy procesorem, wej\u015bciem\/wyj\u015bciem i pami\u0119ci\u0105 RAM. Je\u015bli procesor osi\u0105ga 100 %, a op\u00f3\u017anienie gwa\u0142townie wzrasta, dodatkowe procesy robocze nie s\u0105 zbyt pomocne. Lepiej jest usun\u0105\u0107 rzeczywiste w\u0105skie gard\u0142o lub zmniejszy\u0107 obci\u0105\u017cenie za pomoc\u0105 pami\u0119ci podr\u0119cznej. Dlaczego procesy robocze s\u0105 cz\u0119sto w\u0105skim gard\u0142em, wyja\u015bnia poradnik dotycz\u0105cy <a href=\"https:\/\/webhosting.de\/pl\/php-workers-hosting-bottleneck-guide-balance\/\">PHP-Worker jako w\u0105skie gard\u0142o<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/phpfpm-serverkonfig-7342.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>Najpierw ustalam rzeczywist\u0105 warto\u015b\u0107. <strong>RAM<\/strong>-Zu\u017cycie na pracownika i na tej podstawie ustawiam pm.max_children z buforem. Nast\u0119pnie wybieram tryb pm odpowiedni do obci\u0105\u017cenia i r\u00f3wnowa\u017c\u0119 warto\u015bci startowe oraz zapasowe. Za pomoc\u0105 pm.max_requests utrzymuj\u0119 procesy w stanie aktualnym, bez zb\u0119dnego obci\u0105\u017cenia. Logi, statusy i metryki kieruj\u0119 do przejrzystego systemu monitorowania, aby ka\u017cda zmiana pozosta\u0142a mierzalna. W ten spos\u00f3b osi\u0105gam kr\u00f3tkie czasy odpowiedzi, stabilne pule i obci\u0105\u017cenie serwera, kt\u00f3re ma rezerwy na szczyty.<\/p>","protected":false},"excerpt":{"rendered":"<p>Kompleksowy przewodnik po optymalizacji php-fpm: dowiedz si\u0119, jak optymalnie ustawi\u0107 pm.max_children i inne parametry proces\u00f3w, aby zmaksymalizowa\u0107 wydajno\u015b\u0107 hostingu php.<\/p>","protected":false},"author":1,"featured_media":16046,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-16053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"2654","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":null,"_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"php-fpm tuning","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"16046","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/16053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=16053"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/16053\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/16046"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=16053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=16053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=16053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}