{"id":20730,"date":"2026-08-17T11:52:23","date_gmt":"2026-08-17T09:52:23","guid":{"rendered":"https:\/\/webhosting.de\/apache-event-mpm-vs-worker-mpm-webserver-tuning-optimierung\/"},"modified":"2026-08-17T11:52:23","modified_gmt":"2026-08-17T09:52:23","slug":"apache-mpm-event-a-mpm-worker-dostrajanie-i-optymalizacja-serwera-www","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/apache-event-mpm-vs-worker-mpm-webserver-tuning-optimierung\/","title":{"rendered":"Apache Event MPM a Worker MPM: nowoczesny \u201eturbo\u201d serwera WWW do obs\u0142ugi du\u017cego obci\u0105\u017cenia"},"content":{"rendered":"<p>W dw\u00f3ch zdaniach wyja\u015bni\u0119, dlaczego wyb\u00f3r <strong>Apache MPM<\/strong> wyra\u017anie wp\u0142ywa na przepustowo\u015b\u0107, op\u00f3\u017anienia i stabilno\u015b\u0107 przy du\u017cym obci\u0105\u017ceniu. Por\u00f3wnuj\u0119 przy tym konkretnie tryby Event MPM i Worker MPM w kontek\u015bcie d\u0142ugotrwa\u0142ych po\u0142\u0105cze\u0144 typu keep-alive, protoko\u0142u HTTP\/2 oraz wysokiego stopnia r\u00f3wnoleg\u0142o\u015bci, a na tej podstawie formu\u0142uj\u0119 jasne zalecenia dotycz\u0105ce optymalizacji.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<p>Aby\u015b od razu uchwyci\u0142 najwa\u017cniejsze informacje, kr\u00f3tko podsumuj\u0119 kluczowe tezy i zaznacz\u0119 pogrubion\u0105 czcionk\u0105 kluczowe s\u0142owa. Na podstawie tych punkt\u00f3w przedstawi\u0119 poni\u017cej konkretne czynno\u015bci i konfiguracje, kt\u00f3re wyja\u015bni\u0119 w spos\u00f3b praktyczny. Oba modu\u0142y MPM oceniam konsekwentnie w oparciu o realistyczne profile obci\u0105\u017cenia z du\u017c\u0105 liczb\u0105 po\u0142\u0105cze\u0144. Dzi\u0119ki temu bez zb\u0119dnych komplikacji zorientujesz si\u0119, kt\u00f3ry modu\u0142 najlepiej sprawdza si\u0119 w Twoim \u015brodowisku. Lista ta stanowi skr\u00f3t do podejmowania przemy\u015blanych decyzji w codziennej eksploatacji.<\/p>\n<ul>\n  <li><strong>Wydarzenie<\/strong> oddziela funkcj\u0119 Idle-Keep-Alive od w\u0105tk\u00f3w \u017c\u0105da\u0144 i zapewnia skalowalno\u015b\u0107 przy du\u017cej liczbie po\u0142\u0105cze\u0144.<\/li>\n  <li><strong>Pracownik<\/strong> sprawdza si\u0119 przy kr\u00f3tkich \u017c\u0105daniach, ale przy d\u0142ugim czasie utrzymywania po\u0142\u0105czenia (Keep-Alive) anga\u017cuje w\u0105tki.<\/li>\n  <li><strong>HTTP\/2<\/strong> odnosi wymierne korzy\u015bci z wydarzenia dzi\u0119ki wydajnej obs\u0142udze multipleksowania.<\/li>\n  <li><strong>Zasoby<\/strong>: Funkcja ta pozwala ograniczy\u0107 zu\u017cycie pami\u0119ci RAM i procesora na ka\u017cde aktywne \u017c\u0105danie.<\/li>\n  <li><strong>Kompatybilno\u015b\u0107<\/strong>: Modu\u0142y obs\u0142uguj\u0105ce w\u0105tki s\u0105 obowi\u0105zkowe, mod_php pozostaje w trybie prefork.<\/li>\n<\/ul>\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\/2026\/08\/serverraum-webserverturbo-4837.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Dlaczego Worker i Event wygrywaj\u0105 wy\u015bcig<\/h2>\n\n<p>W nowoczesnym przedsi\u0119biorstwie zdecydowanie stawiam na <strong>W\u0105tki<\/strong>, poniewa\u017c zajmuj\u0105 mniej pami\u0119ci RAM na jedno po\u0142\u0105czenie ni\u017c procesy. Prefork zapewnia\u0142 kiedy\u015b bezpiecze\u0144stwo w przypadku modu\u0142\u00f3w niezabezpieczonych przed wsp\u00f3\u0142dzia\u0142aniem w\u0105tk\u00f3w, ale przy du\u017cej liczbie po\u0142\u0105cze\u0144 trudno go skalowa\u0107. Obecnie dominuj\u0105 modele Worker i Event, poniewa\u017c sprawnie obs\u0142uguj\u0105 wielu jednoczesnych u\u017cytkownik\u00f3w. Jest to szczeg\u00f3lnie op\u0142acalne przy aktywnym Keep-Alive i protokole HTTP\/2, gdzie po\u0142\u0105czenia pozostaj\u0105 otwarte przez d\u0142ugi czas. W\u0142a\u015bnie w tym zakresie wida\u0107 <strong>Wydarzenie<\/strong> swoje zalety, poniewa\u017c nie zajmuje cennych w\u0105tk\u00f3w \u017c\u0105da\u0144 na po\u0142\u0105czenia w trybie bezczynno\u015bci.<\/p>\n\n<h2>Apache Worker MPM: architektura i ograniczenia<\/h2>\n\n<p>Wyja\u015bniam, \u017ce \u201eworker\u201d to po\u0142\u0105czenie proces\u00f3w i <strong>W\u0105tki<\/strong>, w kt\u00f3rym ka\u017cdy proces potomny posiada w\u0105tek nas\u0142uchuj\u0105cy oraz wiele w\u0105tk\u00f3w serwerowych. \u017b\u0105danie trafia do jednego z w\u0105tk\u00f3w, otrzymuje odpowied\u017a, a nast\u0119pnie zwalnia ten w\u0105tek. Je\u015bli po\u0142\u0105czenie pozostaje otwarte, ten sam w\u0105tek pozostaje przypisany do tego po\u0142\u0105czenia. Powoduje to bezczynno\u015b\u0107, gdy wielu klient\u00f3w czeka d\u0142u\u017cej lub wysy\u0142a tylko sporadycznie niewielkie \u017c\u0105dania. Osoby korzystaj\u0105ce z modu\u0142u Worker powinny zatem \u015bwiadomie dobiera\u0107 wielko\u015b\u0107 pul w\u0105tk\u00f3w i limit\u00f3w; w tym celu mog\u0105 skorzysta\u0107 z mojego kr\u00f3tkiego <a href=\"https:\/\/webhosting.de\/pl\/pula-watkow-optymalizacja-serwera-workerhosting-pula-watkow\/\">Optymalizacja puli w\u0105tk\u00f3w<\/a> przyj\u0105\u0107 jako punkt wyj\u015bcia.<\/p>\n\n<h2>Apache Event MPM: wyja\u015bnienie p\u0119tli zdarze\u0144<\/h2>\n\n<p>Opisuj\u0119 zdarzenie jako \u201epracownik plus p\u0119tla zdarze\u0144\u201d, czyli <strong>S\u0142uchacz<\/strong>-W\u0105tki, kt\u00f3re odk\u0142adaj\u0105 nieaktywne po\u0142\u0105czenia. Modu\u0142 nas\u0142uchuj\u0105cy przyjmuje nowe po\u0142\u0105czenia, przekazuje aktywne \u017c\u0105dania do wolnych w\u0105tk\u00f3w roboczych, a nast\u0119pnie odbiera po\u0142\u0105czenie z powrotem. W ten spos\u00f3b w\u0105tki \u017c\u0105da\u0144 dzia\u0142aj\u0105 tylko wtedy, gdy przep\u0142ywaj\u0105 dane. Dzi\u0119ki temu setki lub tysi\u0105ce klient\u00f3w mog\u0105 pozostawa\u0107 otwarte bez blokowania w\u0105tk\u00f3w. W\u0142a\u015bnie to <strong>Parkowanie<\/strong> sprawia, \u017ce Event dzia\u0142a tak wydajnie przy typowych obci\u0105\u017ceniach HTTP\/1.1 i HTTP\/2.<\/p>\n\n<h2>Zdarzenie a pracownik: r\u00f3\u017cnice przy obci\u0105\u017ceniu<\/h2>\n\n<p>Oba modele MPM oceniam zawsze w oparciu o rzeczywiste <strong>Obci\u0105\u017cenie<\/strong> z d\u0142ugimi czasami utrzymywania po\u0142\u0105czenia (Keep-Alive). Worker szybko osi\u0105ga limit, poniewa\u017c po\u0142\u0105czenia w stanie bezczynno\u015bci zajmuj\u0105 w\u0105tki, kt\u00f3rych nast\u0119pnie brakuje do obs\u0142ugi nowych \u017c\u0105da\u0144. Zdarzenie utrzymuje puli w\u0105tk\u00f3w wolne i przenosi nieaktywne po\u0142\u0105czenia do p\u0119tli zdarze\u0144. W ten spos\u00f3b znacznie wzrasta liczba u\u017cytkownik\u00f3w, kt\u00f3rych mo\u017cna obs\u0142u\u017cy\u0107 jednocze\u015bnie, przy czym op\u00f3\u017anienia pozostaj\u0105 stabilne. Kto potrzebuje podstaw do podj\u0119cia decyzji, powinien por\u00f3wna\u0107 konkretne <a href=\"https:\/\/webhosting.de\/pl\/threading-server-model-event-driven-hosting-porownanie-serverperf\/\">modele serwer\u00f3w sterowanych zdarzeniami<\/a> z wykorzystaniem pul w\u0105tk\u00f3w w testach obci\u0105\u017ceniowych.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/ApacheWebserverMeeting2573.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kompatybilno\u015b\u0107: modu\u0142y i typowe konfiguracje<\/h2>\n\n<p>Najpierw sprawdzam <strong>Modu\u0142y<\/strong>, poniewa\u017c modele Worker i Event wymagaj\u0105 bezpiecze\u0144stwa w\u0105tk\u00f3w. Klasyczne stosy mod_php nie s\u0105 tu odpowiednie, dlatego w tym przypadku nadal sensowne jest stosowanie modelu Prefork. Je\u015bli natomiast PHP dzia\u0142a za po\u015brednictwem PHP-FPM lub FastCGI, zdecydowanie wybieram model Event. Dotyczy to r\u00f3wnie\u017c serwer\u00f3w proxy odwrotnych do serwer\u00f3w aplikacji, mikrous\u0142ug lub backend\u00f3w opartych na Go\/Node. W takich konfiguracjach tryb Worker, a przede wszystkim <strong>Wydarzenie<\/strong> swoj\u0105 moc bez \u017cadnych kompromis\u00f3w w zakresie kompatybilno\u015bci.<\/p>\n\n<h2>Konfiguracja: Najwa\u017cniejsze dyrektywy<\/h2>\n\n<p>Przedstawi\u0119 w skr\u00f3cie najwa\u017cniejsze wytyczne, aby\u015b m\u00f3g\u0142 je w\u0142a\u015bciwie zrozumie\u0107 i <strong>dostosowany<\/strong>. Parametr MaxRequestWorkers ogranicza liczb\u0119 \u017c\u0105da\u0144 przetwarzanych jednocze\u015bnie; w przypadku Event cz\u0119sto mo\u017cna ustawi\u0107 wy\u017csz\u0105 warto\u015b\u0107, poniewa\u017c po\u0142\u0105czenia w stanie bezczynno\u015bci nie powoduj\u0105 blokad. Parametr ThreadsPerChild okre\u015bla liczb\u0119 w\u0105tk\u00f3w na proces; zbyt ma\u0142a liczba obni\u017ca przepustowo\u015b\u0107, a zbyt du\u017ca obci\u0105\u017ca procesor. Parametr ServerLimit ustala limit dla proces\u00f3w, a tym samym g\u00f3rn\u0105 granic\u0119 liczby r\u00f3wnoleg\u0142ych \u017c\u0105da\u0144 w systemie. Za pomoc\u0105 parametru KeepAliveTimeout kontrolujesz, jak d\u0142ugo po\u0142\u0105czenia pozostaj\u0105 otwarte; im wy\u017csza warto\u015b\u0107, tym wi\u0119ksze korzy\u015bci <strong>Wydarzenie<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/webserver-turbo-mpm-comparison-8394.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Por\u00f3wnanie tabelaryczne: Worker a Event<\/h2>\n\n<p>Podsumuj\u0119 najwa\u017cniejsze cechy w zwi\u0119z\u0142ej <strong>Tabela<\/strong> razem, aby\u015b od razu dostrzeg\u0142 r\u00f3\u017cnice. Nie zast\u0119puje to testu obci\u0105\u017ceniowego, ale pomaga uporz\u0105dkowa\u0107 spojrzenie na kluczowe cechy. Przeczytaj punkty od lewej do prawej i dopasuj je do profilu swojego ruchu. W ten spos\u00f3b szybko znajdziesz odpowiedni model MPM dla swojej architektury. Nacisk k\u0142adziony jest wyra\u017anie na skalowalno\u015b\u0107, zapotrzebowanie na zasoby oraz zachowanie w warunkach <strong>Keep-Alive<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Kryterium<\/th>\n      <th>Worker MPM<\/th>\n      <th>Wydarzenie MPM<\/th>\n      <th>Wp\u0142yw<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Obs\u0142uga funkcji Keep-Alive<\/td>\n      <td>W\u0105tek pozostaje powi\u0105zany z po\u0142\u0105czeniem<\/td>\n      <td>Po\u0142\u0105czenia w stanie bezczynno\u015bci s\u0105 odk\u0142adane przez p\u0119tl\u0119 zdarze\u0144<\/td>\n      <td>Zdarzenie utrzymuje wolne w\u0105tki \u017c\u0105da\u0144<\/td>\n    <\/tr>\n    <tr>\n      <td>Wykorzystanie zasob\u00f3w<\/td>\n      <td>Wi\u0119cej w\u0105tk\u00f3w zwi\u0105zanych podczas bezczynno\u015bci<\/td>\n      <td>Mniejsza liczba zaj\u0119tych w\u0105tk\u00f3w w stanie bezczynno\u015bci<\/td>\n      <td>Mniejsze obci\u0105\u017cenie pami\u0119ci RAM\/procesora na ka\u017cde aktywne \u017c\u0105danie<\/td>\n    <\/tr>\n    <tr>\n      <td>Op\u00f3\u017anienie pod obci\u0105\u017ceniem<\/td>\n      <td>Wyruszaj wcze\u015bniej<\/td>\n      <td>D\u0142u\u017cej zachowuje stabilno\u015b\u0107<\/td>\n      <td>Lepsza responsywno\u015b\u0107<\/td>\n    <\/tr>\n    <tr>\n      <td>Obs\u0142uga protoko\u0142u HTTP\/2<\/td>\n      <td>Schludnie<\/td>\n      <td>Bardzo wydajne<\/td>\n      <td>Zalety multipleksowania<\/td>\n    <\/tr>\n    <tr>\n      <td>Konfiguracja<\/td>\n      <td>MaxRequestWorkers, ThreadsPerChild, ServerLimit<\/td>\n      <td>Od razu, plus optymalizacja p\u0119tli zdarze\u0144<\/td>\n      <td>Wydarzenie pozwala na wi\u0119ksze wykorzystanie mocy produkcyjnych<\/td>\n    <\/tr>\n    <tr>\n      <td>Kompatybilno\u015b\u0107<\/td>\n      <td>Wymagane s\u0105 modu\u0142y odporne na zakleszczenie w\u0105tk\u00f3w<\/td>\n      <td>Podobnie, najlepiej z wykorzystaniem PHP-FPM<\/td>\n      <td>Prefork pozostaje opcj\u0105 mod_php<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Praktyka: proces tuningu i pomiary<\/h2>\n\n<p>Zawsze zaczynam od czystej linii bazowej <strong>Monitoring<\/strong> oraz dane log\u00f3w. Nast\u0119pnie stopniowo zmieniam warto\u015bci parametr\u00f3w `MaxRequestWorkers` i `ThreadsPerChild`, mierz\u0105c op\u00f3\u017anienie, wska\u017anik b\u0142\u0119d\u00f3w i obci\u0105\u017cenie procesora. Parametr `KeepAliveTimeout` testuj\u0119 etapami, poniewa\u017c idealny czas zale\u017cy w du\u017cym stopniu od zachowania klienta. W tym momencie warto por\u00f3wna\u0107 model Event z modelem Worker za pomoc\u0105 narz\u0119dzi takich jak ab, wrk lub JMeter. Dopiero gdy wska\u017aniki wygl\u0105daj\u0105 prawid\u0142owo, ustalam <strong>Profile<\/strong> oraz dokumentuj\u0119 wska\u017aniki.<\/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\/2026\/08\/apache_mpm_techoffice_4721.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kiedy stosowanie preforku nadal ma sens<\/h2>\n\n<p>Korzystam z Prefork, gdy nie da si\u0119 obej\u015b\u0107 braku zgodno\u015bci z w\u0105tkami <strong>Modu\u0142y<\/strong> musz\u0105 dzia\u0142a\u0107. W takim przypadku izolacja poszczeg\u00f3lnych proces\u00f3w ma wi\u0119ksze znaczenie ni\u017c skalowalno\u015b\u0107. W zamian za to akceptuj\u0119 znacznie wi\u0119ksze zapotrzebowanie na pami\u0119\u0107 RAM na jedno po\u0142\u0105czenie. W przypadku starszych aplikacji, kt\u00f3rych nie da si\u0119 dostosowa\u0107, cz\u0119sto jest to jedyne realistyczne rozwi\u0105zanie. Jednak gdy tylko korzystam z PHP-FPM lub innych zewn\u0119trznych serwer\u00f3w aplikacji, wybieram <strong>Wydarzenie<\/strong> wyra\u017anie.<\/p>\n\n<h2>Kontekst hostingu internetowego i wyb\u00f3r dostawcy<\/h2>\n\n<p>W \u015brodowisku hostingowym zwracam uwag\u0119 na profile MPM, poniewa\u017c na jednym serwerze cz\u0119sto dzia\u0142a wiele wirtualnych host\u00f3w <strong>bieg<\/strong>. Model Event zapewnia tutaj najbardziej efektywne wykorzystanie zasob\u00f3w, zw\u0142aszcza w po\u0142\u0105czeniu z protoko\u0142ami HTTP\/2 i TLS. Je\u015bli m\u00f3j stos wymaga PHP-FPM, ustawiam Event jako domy\u015blny. W celu lepszego zrozumienia i sprawdzenia technicznych aspekt\u00f3w pomocny b\u0119dzie kr\u00f3tki <a href=\"https:\/\/webhosting.de\/pl\/webserver-worker-models-prefork-worker-event-mpm-serverperf\/\">Por\u00f3wnanie: Prefork, Worker, Event<\/a> przed ostatecznym wyborem. Kto wykona te zadania domowe, osi\u0105gnie zauwa\u017calnie lepsze <strong>Czasy reakcji<\/strong> za euro.<\/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\/2026\/08\/entwickler_apachempm_9821.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kompakt najlepszych praktyk<\/h2>\n\n<p>Korzystam z tego konsekwentnie <strong>PHP-FPM<\/strong> lub inne zewn\u0119trzne serwery aplikacji, aby Event m\u00f3g\u0142 w pe\u0142ni wykorzysta\u0107 sw\u00f3j potencja\u0142. Nast\u0119pnie dostosowuj\u0119 parametry `MaxRequestWorkers` i `ThreadsPerChild` do liczby rdzeni procesora i pami\u0119ci RAM oraz sprawdzam sztywne ograniczenia systemu. W przypadku du\u017cej liczby nieaktywnych klient\u00f3w wybieram Event, celowo ustawiaj\u0105c wy\u017cszy parametr KeepAliveTimeout i monitoruj\u0105c przy tym op\u00f3\u017anienia. W przypadku obci\u0105\u017ce\u0144 z bardzo kr\u00f3tkimi \u017c\u0105daniami i umiarkowanym czasem utrzymywania po\u0142\u0105czenia (Keep-Alive) wystarczy model Worker, o ile modu\u0142y pozostaj\u0105 bezpieczne dla w\u0105tk\u00f3w. Bez ci\u0105g\u0142ego monitorowania obci\u0105\u017cenia w\u0105tk\u00f3w, b\u0142\u0119d\u00f3w i <strong>Op\u00f3\u017anienia<\/strong> nie podejmuj\u0119 ostatecznych decyzji.<\/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\/2026\/08\/serverraum-performance-4096.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Konkretne przyk\u0142ady konfiguracji dla Event i Worker<\/h2>\n<p>Przedstawiam dwa minimalistyczne profile, kt\u00f3re wykorzystuj\u0119 jako punkt wyj\u015bcia, a nast\u0119pnie dopracowuj\u0119 na podstawie wynik\u00f3w pomiar\u00f3w. Najwa\u017cniejsze: <strong>MaxRequestWorkers = ServerLimit \u00d7 ThreadsPerChild<\/strong>. Obliczam wstecz, wychodz\u0105c od puli pami\u0119ci RAM i zapotrzebowania na ka\u017cdy w\u0105tek (w tym modu\u0142y, TLS, bufory), a nast\u0119pnie stopniowo zwi\u0119kszam t\u0119 warto\u015b\u0107.<\/p>\n<pre><code>Przyk\u0142ad #: Event MPM (HTTP\/2, PHP-FPM)\nServerLimit 16\nThreadLimit 256\nThreadsPerChild 64\nMaxRequestWorkers     1024\nStartServers 4\nMaxConnectionsPerChild 10000\n\nKeepAlive On\nMaxKeepAliveRequests  100\nKeepAliveTimeout 15\n\n# Opcjonalnie i dostosowa\u0107 wy\u0142\u0105cznie na podstawie pomiar\u00f3w:\n# ListenBacklog 1024\n# ThreadStackSize     1048576   # 1 MB, tylko je\u015bli pozwalaj\u0105 na to modu\u0142y\n# AsyncRequestWorkerFactor 2    # Precyzyjne dostrajanie p\u0119tli zdarze\u0144, zazwyczaj pozostawia si\u0119 warto\u015b\u0107 domy\u015bln\u0105\n\n# HTTP\/2\nProtoko\u0142y h2 http\/1.1\n# H2MaxSessionStreams  100\u2013200  # dostosowa\u0107 precyzyjnie w zale\u017cno\u015bci od wydajno\u015bci zaplecza\n<\/code><\/pre>\n<pre><code>Przyk\u0142ad #: Model MPM typu Worker (kr\u00f3tkie \u017c\u0105dania, umiarkowane Keep-Alive)\nServerLimit 8\nThreadLimit 256\nThreadsPerChild 50\nMaxRequestWorkers     400\nStartServers 4\nMaxConnectionsPerChild 5000\n\nKeepAlive On\nMaxKeepAliveRequests  100\nKeepAliveTimeout 3\nProtocols http\/1.1\n<\/code><\/pre>\n<p>Trzymam <strong>MaxConnectionsPerChild<\/strong> (alias: MaxRequestsPerChild) nie r\u00f3wne 0, aby wykrywa\u0107 powolne wycieki. <strong>KeepAliveTimeout<\/strong> W przypadku Event celowo ustawiam t\u0119 warto\u015b\u0107 wy\u017cej, poniewa\u017c po\u0142\u0105czenia w trybie bezczynno\u015bci s\u0105 niedrogie; w przypadku Worker utrzymuj\u0119 j\u0105 na niskim poziomie, aby nie blokowa\u0107 w\u0105tk\u00f3w.<\/p>\n\n<h2>Precyzyjne dostosowywanie protoko\u0142u HTTP\/2 za pomoc\u0105 Event<\/h2>\n<p>Bior\u0119 pod uwag\u0119 w przypadku <strong>HTTP\/2<\/strong>, \u017ce przegl\u0105darki otwieraj\u0105 niewiele po\u0142\u0105cze\u0144, a wiele <strong>Strumienie<\/strong> multipleksowanie. Dzi\u0119ki temu w\u0105skie gard\u0142o przestaje dotyczy\u0107 liczby po\u0142\u0105cze\u0144, a skupia si\u0119 na sprawiedliwym przydzielaniu w\u0105tk\u00f3w i wydajno\u015bci zaplecza. Dzi\u0119ki mechanizmowi Event w\u0105tki pozostaj\u0105 wolne tak d\u0142ugo, jak d\u0142ugo strumie\u0144 czeka; pozwala to wyr\u00f3wna\u0107 skoki op\u00f3\u017anie\u0144. Praktyczne narz\u0119dzia regulacyjne:<\/p>\n<ul>\n  <li><strong>H2MaxSessionStreams<\/strong>: Zazwyczaj poruszam si\u0119 w przedziale 50\u2013200. Zbyt wysoka warto\u015b\u0107 powoduje efekt \u201ehead-of-line\u201d w back-endzie, a zbyt niska \u2013 marnuje mo\u017cliwo\u015bci r\u00f3wnoleg\u0142o\u015bci.<\/li>\n  <li><strong>MaxRequestWorkers<\/strong>: Dzi\u0119ki funkcji Event mog\u0119 zwi\u0119kszy\u0107 obci\u0105\u017cenie, o ile pozwalaj\u0105 na to pami\u0119\u0107 RAM i procesor. Obserwuj\u0119 95. i 99. percentyl op\u00f3\u017anienia przy rosn\u0105cej r\u00f3wnoleg\u0142o\u015bci.<\/li>\n  <li><strong>TLS<\/strong>: Dzi\u0119ki ALPN i nowoczesnym zestawom szyfr\u00f3w zmniejszam koszty uzgadniania po\u0142\u0105czenia; Event odnosi dodatkowe korzy\u015bci, poniewa\u017c fazy bezczynno\u015bci mi\u0119dzy seriami transmisji s\u0105 efektywnie wykorzystywane.<\/li>\n<\/ul>\n\n<h2>Ograniczenia systemu operacyjnego i kolejki po\u0142\u0105cze\u0144<\/h2>\n<p>Przed ka\u017cdym testem obci\u0105\u017ceniowym sprawdzam granice systemu, w przeciwnym razie ograniczeniem nie b\u0119dzie MPM, lecz j\u0105dro. W przypadku du\u017cej liczby po\u0142\u0105cze\u0144 skaluj\u0119 w szczeg\u00f3lno\u015bci:<\/p>\n<ul>\n  <li><strong>Deskryptory plik\u00f3w<\/strong>: ulimit -n i systemd <code>LimitNOFILE<\/code> zwi\u0119kszam np. do 65536 lub wi\u0119cej; Apache potrzebuje FD na ka\u017cdy socket, log i potok.<\/li>\n  <li><strong>zaleg\u0142o\u015bci<\/strong>: <code>net.core.somaxconn<\/code> oraz <code>tcp_max_syn_backlog<\/code> ustawiam odpowiedni\u0105 warto\u015b\u0107 (np. 1024\u20134096), aby nie dosz\u0142o do przepe\u0142nienia kolejki Accept.<\/li>\n  <li><strong>Zakres port\u00f3w<\/strong> (w przypadku serwera proxy odwrotnego): <code>ip_local_port_range<\/code> zwi\u0119kszam (np. 10000\u201365000), gdy istnieje wiele jednoczesnych po\u0142\u0105cze\u0144 wychodz\u0105cych z serwerami zaplecza.<\/li>\n  <li><strong>FIN\/Przerwy na \u017c\u0105danie<\/strong>: Nale\u017cy zachowa\u0107 ostro\u017cno\u015b\u0107 w przypadku <code>tcp_fin_timeout<\/code>: zbyt agresywne ustawienie mo\u017ce powodowa\u0107 przerwy w po\u0142\u0105czeniu; zmieniam ustawienia wy\u0142\u0105cznie na podstawie pomiar\u00f3w.<\/li>\n<\/ul>\n<p>Dokumentuj\u0119 ka\u017cd\u0105 zmian\u0119 w j\u0105drze wraz z uzasadnieniem i weryfikuj\u0119 j\u0105 poprzez ponowny pomiar obci\u0105\u017cenia. Bez potwierdzenia ustawienie domy\u015blne zazwyczaj okazuje si\u0119 w\u0142a\u015bciwe.<\/p>\n\n<h2>Monitorowanie i diagnostyka usterek w codziennej pracy<\/h2>\n<p>Aktywuj\u0119 <strong>Status rozszerzony<\/strong> i korzystam z polecenia `server-status`, aby sprawdzi\u0107 <strong>Tabela wynik\u00f3w<\/strong>-odczytywanie stan\u00f3w. W sekcji \u201eEvent\u201d widz\u0119 wiele gniazd typu idle\/keep-alive, mimo \u017ce w\u0105tki robocze nie s\u0105 w pe\u0142ni obci\u0105\u017cone. W dzienniku b\u0142\u0119d\u00f3w pojawia si\u0119 komunikat \u201eserver reached <strong>MaxRequestWorkers<\/strong> \u201csetting, consider raising the MaxRequestWorkers setting\u201d \u2013 serwer ju\u017c osi\u0105gn\u0105\u0142 limit; ostro\u017cnie zwi\u0119kszam t\u0119 warto\u015b\u0107 i obserwuj\u0119 obci\u0105\u017cenie pami\u0119ci RAM i procesora oraz wska\u017anik b\u0142\u0119d\u00f3w.<\/p>\n<ul>\n  <li><strong>Pola pomiarowe<\/strong>: W logach dost\u0119pu rejestruj\u0119 czasy odpowiedzi (np. %D\/%T), kody statusu oraz liczb\u0119 bajt\u00f3w; koreluj\u0119 szczyty obci\u0105\u017cenia z wykorzystaniem procesora i operacjami wej\u015bcia\/wyj\u015bcia.<\/li>\n  <li><strong>Objawy u postaci typu \u201eWorker\u201d<\/strong>: Wiele nieaktywnych po\u0142\u0105cze\u0144 typu keep-alive, 100 w\u0105tk\u00f3w zaj\u0119tych przez %, rosn\u0105ce op\u00f3\u017anienie, b\u0142\u0119dy 503\/504 \u2013 oznaka zaj\u0119tych w\u0105tk\u00f3w.<\/li>\n  <li><strong>Objawy podczas wydarzenia<\/strong>: W\u0105tki nas\u0142uchuj\u0105ce s\u0105 mocno obci\u0105\u017cone, ale w\u0105tki robocze s\u0105 wolne \u2013 zazwyczaj wynika to z ogranicze\u0144 sieciowych lub backendu, a nie z MPM.<\/li>\n  <li><strong>Graceful-Reload<\/strong>: Wprowadzam zmiany za pomoc\u0105 <code>apachectl -k graceful<\/code> aby istniej\u0105ce po\u0142\u0105czenia mog\u0142y swobodnie odp\u0142ywa\u0107.<\/li>\n<\/ul>\n\n<h2>Planowanie wydajno\u015bci: od rdzeni i pami\u0119ci RAM do parametru MaxRequestWorkers<\/h2>\n<p>My\u015bl\u0119 pragmatycznie: ile pami\u0119ci RAM na w\u0105tek plus bufor chc\u0119 przeznaczy\u0107? W przypadku TLS, filtr\u00f3w i popularnych modu\u0142\u00f3w zak\u0142adam ostro\u017cnie kilka MB na w\u0105tek. Nast\u0119pnie ustawiam <strong>MaxRequestWorkers<\/strong> tak, aby obci\u0105\u017cenie szczytowe w 95. i 99. percentylu by\u0142o obs\u0142ugiwane bez swapowania. Na poziomie procesora obowi\u0105zuje zasada: w\u0105tki wykraczaj\u0105ce poza liczb\u0119 rdzeni s\u0105 pomocne tylko wtedy, gdy nie wymagaj\u0105 one nieustannie intensywnego wykorzystania czasu procesora. W przypadku zdarze\u0144 pozwalam sobie na wy\u017csze warto\u015bci, poniewa\u017c fazy bezczynno\u015bci praktycznie nic nie kosztuj\u0105.<\/p>\n<ul>\n  <li><strong>Og\u00f3lne zasady<\/strong>: Rozpocznij od 32\u201364 w\u0105tk\u00f3w na proces, 4\u201316 proces\u00f3w; nast\u0119pnie przeprowad\u017a pomiary i dostosuj ustawienia.<\/li>\n  <li><strong>Rozmiar stosu w\u0105tk\u00f3w<\/strong>: Je\u015bli pami\u0119\u0107 RAM jest ograniczona, a modu\u0142y na to pozwalaj\u0105, zmniejszam rozmiar stosu (ostro\u017cnie, przeprowadzaj\u0105c test obci\u0105\u017ceniowy).<\/li>\n  <li><strong>MaxKeepAliveRequests<\/strong>: Zazwyczaj pozostawiam ustawienie domy\u015blne; w przypadku \u201egadatliwych\u201d klient\u00f3w wy\u017csza warto\u015b\u0107 mo\u017ce zmniejszy\u0107 obci\u0105\u017cenie.<\/li>\n<\/ul>\n\n<h2>Scenariusze z wykorzystaniem serwera proxy odwrotnego i po\u0142\u0105czenia z serwerami zaplecza<\/h2>\n<p>Szczeg\u00f3lnie ch\u0119tnie wykorzystuj\u0119 Event w backendach aplikacji, poniewa\u017c <strong>Gniazda przednie<\/strong> parkuje si\u0119 efektywnie, podczas gdy w\u0142a\u015bciwa praca odbywa si\u0119 w tle. Kluczowe znaczenie ma w\u00f3wczas \u0142\u0105czenie zasob\u00f3w <strong>Po\u0142\u0105czenia z zapleczem<\/strong> (mod_proxy):<\/p>\n<ul>\n  <li><strong>Keep-Alive do serwera zaplecza<\/strong>: Pozostawi\u0107 w\u0142\u0105czon\u0105, aby oszcz\u0119dza\u0107 uzgodnienia; wielko\u015b\u0107 pul (<em>max<\/em> (dla ka\u017cdego celu) odpowiednio do mo\u017cliwo\u015bci serwera.<\/li>\n  <li><strong>Limity czasu serwer\u00f3w proxy<\/strong>: Nale\u017cy jasno zdefiniowa\u0107 przerwy, aby zawieszone modu\u0142y backendowe nie blokowa\u0142y w\u0105tk\u00f3w frontendu.<\/li>\n  <li><strong>HTTP\/2 do backendu<\/strong>: Tam, gdzie to mo\u017cliwe, korzystam z H2 (np. wewn\u0119trznie h2c), aby zmniejszy\u0107 liczb\u0119 po\u0142\u0105cze\u0144 przy wi\u0119kszej liczbie strumieni \u2013 Event dobrze si\u0119 z tym \u0142\u0105czy.<\/li>\n<\/ul>\n<p>Celowo obserwuj\u0119 udzia\u0142y op\u00f3\u017anie\u0144 w frontendzie i backendzie; je\u015bli wyd\u0142u\u017ca si\u0119 wy\u0142\u0105cznie czas dzia\u0142ania backendu, samo dostrojenie MPM nie wystarczy \u2013 w takim przypadku musz\u0119 dostosowa\u0107 rozmiary puli, limity czasu lub zasoby backendu.<\/p>\n\n<h2>Strategia wdra\u017cania i migracja z modelu \u201eworker\u201d do modelu \u201eevent\u201d<\/h2>\n<p>Przeprowadzam migracj\u0119, wykonuj\u0105c jasno okre\u015blone kroki: najpierw sprawdzam <strong>Lista modu\u0142\u00f3w<\/strong> (apachectl -M) pod k\u0105tem bezpiecze\u0144stwa w\u0105tk\u00f3w. Wszystko, co nie jest bezpieczne dla w\u0105tk\u00f3w (klasyczny mod_php), musi zosta\u0107 usuni\u0119te lub odizolowane. Nast\u0119pnie aktywuj\u0119 Event, ustawiam konserwatywne warto\u015bci pocz\u0105tkowe i przeprowadzam testy obci\u0105\u017ceniowe na \u015brodowisku stagingowym. Podczas wdra\u017cania zaczynam od cz\u0119\u015bci ruchu (Canary), por\u00f3wnuj\u0119 wska\u017aniki i dopiero wtedy przeprowadzam szerokie wdro\u017cenie.<\/p>\n<ul>\n  <li><strong>komendy<\/strong>: Zgodnie z procedur\u0105 dystrybucji prze\u0142\u0105cz modu\u0142y MPM (np. a2dismod\/a2enmod) i wykonaj czysty restart.<\/li>\n  <li><strong>Plan awaryjny<\/strong>: Przygotowa\u0142em profil pracownika na wypadek, gdyby jaki\u015b modu\u0142 w sekcji \u201eEvent\u201d zachowywa\u0142 si\u0119 nietypowo.<\/li>\n  <li><strong>Dokumentacja<\/strong>: Ka\u017cda zmiana limit\u00f3w, parametr\u00f3w HTTP\/2 i warto\u015bci j\u0105dra jest przeze mnie dokumentowana za pomoc\u0105 pomiar\u00f3w przed i po zmianie.<\/li>\n<\/ul>\n\n<h2>Bezpiecze\u0144stwo i wydajno\u015b\u0107 protoko\u0142u TLS pod lup\u0105<\/h2>\n<p>W przypadku protoko\u0142u TLS zauwa\u017cam, \u017ce procedury uzgadniania po\u0142\u0105czenia s\u0105 bardzo obci\u0105\u017caj\u0105ce dla procesora i pod obci\u0105\u017ceniem mog\u0105 zwi\u0119ksza\u0107 op\u00f3\u017anienie. Z <strong>Wznowienie sesji<\/strong> Dzi\u0119ki zastosowaniu nowoczesnych algorytm\u00f3w szyfrowania ograniczam koszty, a jednocze\u015bnie efektywnie wykorzystuj\u0119 fazy bezczynno\u015bci. W po\u0142\u0105czeniu z protoko\u0142ami HTTP\/2 i ALPN unikam dodatkowych cykli wymiany danych. Wa\u017cne: bufory TLS i parametry OpenSSL wp\u0142ywaj\u0105 na zu\u017cycie pami\u0119ci RAM przez ka\u017cdy w\u0105tek \u2013 uwzgl\u0119dniam je przy planowaniu wydajno\u015bci.<\/p>\n\n<h2>Odporno\u015b\u0107 na awarie i p\u0142ynne ograniczanie wydajno\u015bci<\/h2>\n<p>Planuj\u0119 na wypadek przeci\u0105\u017cenia: czy procesor jest obci\u0105\u017cony do granic mo\u017cliwo\u015bci, czy te\u017c Apache osi\u0105ga <strong>MaxRequestWorkers<\/strong>, nie chc\u0119 lawiny ponownych pr\u00f3b. Ustawiam jasne limity czasu, przejrzyste strony b\u0142\u0119d\u00f3w oraz limity cz\u0119stotliwo\u015bci na proxy znajduj\u0105cych si\u0119 na wcze\u015bniejszych etapach. Dzi\u0119ki Eventowi pod presj\u0105 pozostaje wi\u0119cej <strong>W\u0105tki<\/strong> dost\u0119pne do rzeczywistej pracy, podczas gdy po\u0142\u0105czenia w stanie bezczynno\u015bci s\u0105 zawieszone \u2013 w\u0142a\u015bnie ta rezerwa pozwala systemowi dzia\u0142a\u0107 d\u0142u\u017cej, a\u017c obci\u0105\u017cenie ponownie spadnie lub zadzia\u0142a automatyczne skalowanie.<\/p>\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>W mojej obecnej dzia\u0142alno\u015bci stawiam na <strong>Wydarzenie<\/strong>, gdy tylko m\u00f3j stos zacznie korzysta\u0107 z modu\u0142\u00f3w bezpiecznych dla w\u0105tk\u00f3w oraz PHP-FPM. Takie podej\u015bcie zmniejsza liczb\u0119 przypisanych w\u0105tk\u00f3w w przypadku po\u0142\u0105cze\u0144 w stanie bezczynno\u015bci, zapewnia stabilny czas reakcji i zwi\u0119ksza liczb\u0119 u\u017cytkownik\u00f3w obs\u0142ugiwanych r\u00f3wnolegle. Tryb Worker pozostaje solidn\u0105 opcj\u0105 dla kr\u00f3tkich \u017c\u0105da\u0144 z umiarkowanym czasem utrzymywania po\u0142\u0105czenia (Keep-Alive), gdy tryb Event nie sprawdza si\u0119 ze wzgl\u0119d\u00f3w organizacyjnych. Tryb Prefork rezerwuj\u0119 dla konfiguracji z modu\u0142ami niebezpiecznymi dla w\u0105tk\u00f3w lub starszym kodem. Dzi\u0119ki przejrzystym testom obci\u0105\u017ceniowym, precyzyjnemu dostrojeniu dyrektyw i widocznemu <strong>Monitoring<\/strong> sprawiam, \u017ce Apache osi\u0105ga pr\u0119dko\u015b\u0107 turbo w spos\u00f3b powtarzalny.<\/p>","protected":false},"excerpt":{"rendered":"<p>Apache Event MPM a Worker MPM: Dowiedz si\u0119, kt\u00f3ry modu\u0142 MPM zapewnia najlepsz\u0105 wydajno\u015b\u0107 przy nowoczesnym dostrajaniu serwera WWW oraz kiedy warto postawi\u0107 na modu\u0142 Event.<\/p>","protected":false},"author":1,"featured_media":20723,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-20730","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-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":"91","_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":"1","_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":"Apache MPM","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":"20723","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20730","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=20730"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20730\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/20723"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=20730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=20730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=20730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}