{"id":16437,"date":"2026-01-01T11:50:05","date_gmt":"2026-01-01T10:50:05","guid":{"rendered":"https:\/\/webhosting.de\/keep-alive-webserver-performance-tuning-guide\/"},"modified":"2026-01-01T11:50:05","modified_gmt":"2026-01-01T10:50:05","slug":"przewodnik-po-optymalizacji-wydajnosci-serwera-www","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/keep-alive-webserver-performance-tuning-guide\/","title":{"rendered":"Keep Alive Webserver: prawid\u0142owa konfiguracja cichego hamulca wydajno\u015bci"},"content":{"rendered":"<p>Serwer WWW Keep Alive cz\u0119sto decyduje o czasie oczekiwania lub szybko\u015bci: \u017ale skonfigurowany spowalnia dzia\u0142anie, a prawid\u0142owo dostrojony zauwa\u017calnie przyspiesza ka\u017cde zapytanie. Poka\u017c\u0119 konkretnie, jak ja <strong>Keep-Alive<\/strong> Skonfiguruj, kt\u00f3re przedzia\u0142y czasowe s\u0105 skuteczne i dlaczego zbyt d\u0142ugie otwarte <strong>TCP<\/strong>-Po\u0142\u0105czenia Koszt us\u0142ugi.<\/p>\n\n<h2>Punkty centralne<\/h2>\n<ul>\n  <li><strong>mechanizm<\/strong>: Otwarte po\u0142\u0105czenia TCP oszcz\u0119dzaj\u0105 uzgodnienia i zmniejszaj\u0105 op\u00f3\u017anienia.<\/li>\n  <li><strong>warto\u015bci podstawowe<\/strong>: KeepAliveTimeout, MaxKeepAliveRequests i aktywacj\u0119 wybiera\u0107 w spos\u00f3b celowy.<\/li>\n  <li><strong>Obci\u0105\u017cenie serwera<\/strong>: Prawid\u0142owo dostrojone okna czasowe zmniejszaj\u0105 zapotrzebowanie na moc procesora i pami\u0119\u0107 RAM.<\/li>\n  <li><strong>Praktyka<\/strong>: Konsekwentnie uwzgl\u0119dnia\u0107 zachowanie przegl\u0105darki i \u0142a\u0144cuchy odwrotnych serwer\u00f3w proxy.<\/li>\n  <li><strong>Kontrola<\/strong>: Mierzy\u0107, dopasowywa\u0107, ponownie mierzy\u0107 \u2013 a\u017c do osi\u0105gni\u0119cia idealnego punktu.<\/li>\n<\/ul>\n\n<h2>Co oferuje Keep Alive<\/h2>\n\n<p>Zamiast rozpoczyna\u0107 ka\u017cde zapytanie nowym handshake'iem, Keep-Alive utrzymuje <strong>TCP<\/strong>-Po\u0142\u0105czenie pozostaje otwarte i obs\u0142uguje kilka \u017c\u0105da\u0144 jednocze\u015bnie. W scenariuszu obejmuj\u0105cym 50 \u017c\u0105da\u0144 na sekund\u0119 od trzech klient\u00f3w liczba pakiet\u00f3w spada drastycznie: z oko\u0142o 9000 do oko\u0142o 540 pakiet\u00f3w na minut\u0119, poniewa\u017c powstaje mniej po\u0142\u0105cze\u0144 i odbywa si\u0119 mniej uzgodnie\u0144. Skraca to czas oczekiwania i oszcz\u0119dza cykle serwera, co ma bezpo\u015bredni wp\u0142yw na <strong>Czas za\u0142adunku<\/strong> i przepustowo\u015bci. W testach czas ten zmniejsza si\u0119 o po\u0142ow\u0119, z oko\u0142o 1190 ms do oko\u0142o 588 ms, czyli o dobre 50 procent, o ile pozosta\u0142a cz\u0119\u015b\u0107 \u0142a\u0144cucha nie jest ograniczona. Dlatego zawsze umieszczam Keep-Alive na pocz\u0105tku konfiguracji i sprawdzam rzeczywiste op\u00f3\u017anienia w ruchu na \u017cywo.<\/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\/2026\/01\/keepalive-serverkonfig-9142.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>W\u0142a\u015bciwe wska\u017aniki<\/h2>\n\n<p>Zaczn\u0119 od trzech parametr\u00f3w, kt\u00f3re zawsze maj\u0105 wp\u0142yw: aktywacja, liczba \u017c\u0105da\u0144 na po\u0142\u0105czenie i przedzia\u0142 czasowy do zamkni\u0119cia <strong>Po\u0142\u0105czenie<\/strong>. Aktywacja decyduje o tym, czy ponowne wykorzystanie w og\u00f3le ma miejsce; maksymalna liczba zapyta\u0144 kontroluje, jak d\u0142ugo po\u0142\u0105czenie pozostaje otwarte; limit czasu r\u00f3wnowa\u017cy oszcz\u0119dno\u015b\u0107 i szybko\u015b\u0107 reakcji. Zbyt d\u0142ugi czas blokuje sloty i marnuje pami\u0119\u0107 RAM, poniewa\u017c nieaktywne gniazda pozostaj\u0105 nieaktywne i brakuje pracownik\u00f3w. Zbyt kr\u00f3tki czas niweluje korzy\u015bci, poniewa\u017c serwer zbyt wcze\u015bnie si\u0119 roz\u0142\u0105cza i musi ponownie uruchomi\u0107 si\u0119. Trzymam si\u0119 oszcz\u0119dnych ustawie\u0144 domy\u015blnych i zwi\u0119kszam je tylko wtedy, gdy pomiary potwierdzaj\u0105 rzeczywiste czasy oczekiwania w stanie bezczynno\u015bci.<\/p>\n\n<h2>HTTP\/1.1 a HTTP\/2\/3: klasyfikacja<\/h2>\n\n<p>Keep-Alive dzia\u0142a dla ka\u017cdego po\u0142\u0105czenia TCP. W przypadku HTTP\/1.1 wiele \u017c\u0105da\u0144 dzieli mi\u0119dzy sob\u0105 jedno \u0142\u0105cze, a w przypadku HTTP\/2 wiele \u017c\u0105da\u0144 dzieli mi\u0119dzy sob\u0105 wiele \u0142\u0105czy. <strong>Strumienie<\/strong> multipleksowane przez jedno po\u0142\u0105czenie, HTTP\/3 wykorzystuje QUIC zamiast TCP. Uwa\u017cam, \u017ce: kr\u00f3tki limit czasu pozostaje sensowny r\u00f3wnie\u017c w przypadku HTTP\/2, poniewa\u017c strumienie bezczynne nie s\u0105 bezp\u0142atne \u2013 po\u0142\u0105czenie nadal zajmuje zasoby, zw\u0142aszcza w przypadku <strong>TLS<\/strong>. Nginx ma w\u0142asne okno bezczynno\u015bci dla HTTP\/2; dbam o to, aby globalne warto\u015bci Keep-Alive i warto\u015bci graniczne specyficzne dla HTTP\/2 by\u0142y do siebie dopasowane i nie by\u0142y zbyt wysokie. Wa\u017cne: Nginx komunikuje si\u0119 obecnie tylko z klientem HTTP\/2; z backendem komunikuje si\u0119 <strong>HTTP\/1.1<\/strong>-Po\u0142\u0105czenia otwarte. Upstream-Keepalive pozostaje zatem obowi\u0105zkowe, aby zachowa\u0107 zalety end-to-end. W przypadku HTTP\/3 obowi\u0105zuj\u0105 podobne zasady: nawet je\u015bli QUIC lepiej maskuje straty, d\u0142ugo otwarty, niewykorzystywany kana\u0142 kosztuje pami\u0119\u0107 i deskryptory plik\u00f3w. Dlatego moje podej\u015bcie pozostaje konserwatywne: kr\u00f3tkie okna bezczynno\u015bci, jasne limity i raczej czyste ponowne po\u0142\u0105czenie ni\u017c nieko\u0144cz\u0105ce si\u0119 utrzymywanie.<\/p>\n\n<h2>Pragmatyczne spojrzenie na obci\u0105\u017cenie TLS<\/h2>\n\n<p>TLS jeszcze bardziej zwi\u0119ksza oszcz\u0119dno\u015bci dzi\u0119ki funkcji Keep-Alive, poniewa\u017c uzgodnienia s\u0105 dro\u017csze ni\u017c czyste struktury TCP. Dzi\u0119ki TLS 1.3 i wznowieniu sesji obci\u0105\u017cenie zmniejsza si\u0119, ale w sumie ka\u017cde unikni\u0119te nowe po\u0142\u0105czenie jest korzystne. W praktyce sprawdzam trzy kwestie: po pierwsze, czy serwer prawid\u0142owo wykorzystuje wznowienie sesji (bilety nie trac\u0105 wa\u017cno\u015bci zbyt wcze\u015bnie). Po drugie, czy silne szyfry i nowoczesne protoko\u0142y s\u0105 aktywne, bez niepotrzebnego zmuszania starych klient\u00f3w. Po trzecie, czy wykorzystanie procesora pozostaje stabilne przy wysokiej r\u00f3wnoleg\u0142o\u015bci. Nawet przy wznowieniu kr\u00f3tkie, stabilne okna czasu keep-alive pozwalaj\u0105 unikn\u0105\u0107 dodatkowych szczyt\u00f3w obci\u0105\u017cenia procesora, poniewa\u017c rozpoczyna si\u0119 mniej negocjacji. Jednocze\u015bnie zbyt d\u0142ugie okna nie uniemo\u017cliwiaj\u0105 uzgodnie\u0144, ale przenosz\u0105 obci\u0105\u017cenie do stanu bezczynno\u015bci \u2013 jest to dro\u017csza opcja.<\/p>\n\n<h2>Apache: zalecane ustawienia<\/h2>\n\n<p>W Apache w\u0142\u0105czam KeepAlive na <strong>On<\/strong>, ustaw MaxKeepAliveRequests na 300\u2013500 i wybierz przedzia\u0142 czasowy wynosz\u0105cy zazwyczaj 2\u20133 sekundy. Warto\u015b\u0107 0 dla maksymalnej liczby \u017c\u0105da\u0144 wydaje si\u0119 kusz\u0105ca, ale nieograniczona liczba rzadko ma sens, poniewa\u017c po\u0142\u0105czenia trwaj\u0105 wtedy zbyt d\u0142ugo. <strong>klei\u0107<\/strong>. W przypadku aplikacji o du\u017cym nat\u0119\u017ceniu ruchu z stabilnymi klientami testuj\u0119 5\u201310 sekund; w przypadku szczyt\u00f3w z wieloma kr\u00f3tkimi wizytami zmniejszam czas do 1\u20132 sekund. Wa\u017cne jest, aby najpierw skr\u00f3ci\u0107 limit czasu, a nast\u0119pnie dok\u0142adniej dostosowa\u0107 liczb\u0119 \u017c\u0105da\u0144, aby sloty nie by\u0142y blokowane przez bezczynno\u015b\u0107. Je\u015bli nie masz dost\u0119pu do g\u0142\u00f3wnej konfiguracji, mo\u017cesz kontrolowa\u0107 zachowanie po\u0142\u0105czenia dla ka\u017cdego katalogu za pomoc\u0105 mod_headers, o ile hostingodawca udost\u0119pni\u0142 t\u0119 opcj\u0119.<\/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\/01\/webserver_meeting_7632.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Nginx: sensowne dostrajanie<\/h2>\n\n<p>W Nginx funkcja Keep-Alive jest domy\u015blnie aktywna, dlatego zwracam szczeg\u00f3ln\u0105 uwag\u0119 na limit czasu, wyj\u0105tki przegl\u0105darki i liczb\u0119 po\u0142\u0105cze\u0144. Za pomoc\u0105 keepalive_timeout ustalam liczb\u0119 sekund, kt\u00f3re stopniowo dostosowuj\u0119 od 1 do 5 sekund w zale\u017cno\u015bci od wzorca ruchu; w przypadku wielu wywo\u0142a\u0144 API sensowne mo\u017ce by\u0107 r\u00f3wnie\u017c 10 sekund. Za pomoc\u0105 keepalive_disable wykluczam problematyczne stare klienty, aby nie powodowa\u0142y nieprawid\u0142owo\u015bci. <strong>Sesje<\/strong> . W przypadku odwrotnych serwer\u00f3w proxy do upstream\u00f3w dodatkowo ustawiam upstream keepalive, aby Nginx ponownie wykorzystywa\u0142 po\u0142\u0105czenia z backendem i zajmowa\u0142 tam mniej pracownik\u00f3w. W ten spos\u00f3b utrzymuj\u0119 sp\u00f3jno\u015b\u0107 \u015bcie\u017cki od pocz\u0105tku do ko\u0144ca i zapobiegam niepo\u017c\u0105danym <strong>Rozstania<\/strong> w \u015brodku przep\u0142ywu \u017c\u0105da\u0144.<\/p>\n\n<h2>Odwrotny serwer proxy i przekazywanie nag\u0142\u00f3wk\u00f3w<\/h2>\n\n<p>W konfiguracjach wielopoziomowych potrzebuj\u0119 sp\u00f3jnego <strong>Strategia<\/strong>, kt\u00f3ry poprawnie przekazuje nag\u0142\u00f3wki HTTP\/1.1 i nie nadpisuje przypadkowo warto\u015bci po\u0142\u0105czenia. Nginx powinien komunikowa\u0107 si\u0119 z backendem w protokole HTTP\/1.1 i wyra\u017anie tolerowa\u0107 Keep-Alive, podczas gdy Apache wykorzystuje odpowiednie okna czasowe. Krytyczne s\u0105 konfiguracje, kt\u00f3re wymuszaj\u0105 Connection: close lub zak\u0142\u00f3caj\u0105 \u015bcie\u017cki aktualizacji, poniewa\u017c wtedy rzekoma korzy\u015b\u0107 znika. W Apache mog\u0119 kontrolowa\u0107 za pomoc\u0105 mod_headers dla ka\u017cdej lokalizacji, czy po\u0142\u0105czenia pozostaj\u0105 otwarte i jakie dodatkowe informacje s\u0105 ustawiane. Wszystkie w\u0119z\u0142y musz\u0105 mie\u0107 ten sam cel, w przeciwnym razie jeden z nich spowoduje <strong>skuteczno\u015b\u0107 hamowania<\/strong>, kt\u00f3rych w\u0142a\u015bciwie chcia\u0142em unikn\u0105\u0107.<\/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\/01\/keepalive-server-konfigurieren-0923.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>CDN, Load Balancer i konfiguracje chmury<\/h2>\n\n<p>Je\u015bli przed nim znajduje si\u0119 CDN lub modu\u0142 r\u00f3wnowa\u017cenia obci\u0105\u017cenia, wi\u0119kszo\u015b\u0107 po\u0142\u0105cze\u0144 klient\u00f3w trafia w\u0142a\u015bnie tam. \u0179r\u00f3d\u0142o korzysta wtedy przede wszystkim z trwa\u0142ych, nielicznych po\u0142\u0105cze\u0144 mi\u0119dzy brzegiem a \u017ar\u00f3d\u0142em. Zwracam uwag\u0119, aby modu\u0142 r\u00f3wnowa\u017cenia r\u00f3wnie\u017c pracowa\u0142 z kr\u00f3tkimi oknami bezczynno\u015bci i aby aktywowana by\u0142a funkcja \u0142\u0105czenia po\u0142\u0105cze\u0144 z zapleczem. W \u015brodowiskach kontenerowych i chmurowych liczy si\u0119 r\u00f3wnie\u017c przep\u0142yw drena\u017cowy: przed aktualizacj\u0105 typu rolling wysy\u0142am w\u0119ze\u0142 do <strong>Ods\u0105czanie<\/strong>-status, szybko zamykam otwarte po\u0142\u0105czenia (czas oczekiwania nie jest zbyt d\u0142ugi) i dopiero wtedy uruchamiam zamiennik. W ten spos\u00f3b unikam przerwanych \u017c\u0105da\u0144 i pozosta\u0142ych po\u0142\u0105cze\u0144 zombie. Sticky Sessions (np. za pomoc\u0105 plik\u00f3w cookie) mog\u0105 rozdziela\u0107 pule po\u0142\u0105cze\u0144; tam, gdzie to mo\u017cliwe, stawiam na low-state. <strong>Backendy<\/strong> lub zewn\u0119trzne magazyny sesji, aby ponowne wykorzystanie dzia\u0142a\u0142o r\u00f3wnomiernie.<\/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\/01\/keepalive_webserver_buero_4621.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Szybko\u015b\u0107 hostingu w praktyce<\/h2>\n\n<p>Wiele \u015brodowisk wsp\u00f3\u0142dzielonych wy\u0142\u0105cza funkcj\u0119 Keep-Alive, aby w kr\u00f3tkim czasie <strong>Automaty do gry<\/strong> oszcz\u0119dza\u0107, ale strony staj\u0105 si\u0119 powolne i trac\u0105 interaktywno\u015b\u0107. Dlatego te\u017c na wczesnym etapie sprawdzam za pomoc\u0105 test\u00f3w czasu \u0142adowania, czy serwer pozwala na ponowne wykorzystanie i jak wygl\u0105daj\u0105 fazy po\u0142\u0105czenia na wykresie wodospadowym. Je\u015bli narz\u0119dzie wykrywa d\u0142ugie bloki handshake mi\u0119dzy wieloma ma\u0142ymi zasobami, zazwyczaj brakuje ponownego wykorzystania lub limit czasu ko\u0144czy si\u0119 zbyt wcze\u015bnie. W dalszym dopracowywaniu ustawie\u0144 pomaga mi uporz\u0105dkowany przewodnik, taki jak ten kompaktowy <a href=\"https:\/\/webhosting.de\/pl\/http-keep-alive-tuning-obciazenie-serwera-optymalizacja-wydajnosci-przeplyw\/\">Optymalizacja Keep-Alive<\/a>, aby m\u00f3c wykonywa\u0107 kolejne czynno\u015bci w spos\u00f3b uporz\u0105dkowany. W ten spos\u00f3b unikam zgadywania i osi\u0105gam zauwa\u017calne rezultaty za pomoc\u0105 kilku prostych krok\u00f3w. <strong>impuls<\/strong> w przedniej cz\u0119\u015bci.<\/p>\n\n<h2>Limity czasu, ograniczenia i zachowanie przegl\u0105darki<\/h2>\n\n<p>Nowoczesne przegl\u0105darki otwieraj\u0105 wiele r\u00f3wnoleg\u0142ych <strong>Po\u0142\u0105czenia<\/strong>, cz\u0119sto sze\u015b\u0107, i szybko wyczerpuj\u0105 w ten spos\u00f3b pojemno\u015b\u0107 Keep-Alive. MaxKeepAliveRequests wynosz\u0105ce 300 wystarcza w praktyce dla wielu jednoczesnych odwiedzaj\u0105cych, o ile limit czasu nie jest niepotrzebnie wysoki. Je\u015bli ustawi\u0119 okno na trzy sekundy, sloty pozostan\u0105 dost\u0119pne, a serwer nada priorytet aktywnym klientom zamiast bezczynno\u015bci. Dopiero gdy \u017c\u0105dania regularnie si\u0119 urywaj\u0105 lub ponowne wykorzystanie nie dzia\u0142a, zwi\u0119kszam limit w umiarkowanych krokach. Strony z wieloma strumieniami HTTP\/2 wymagaj\u0105 osobnego rozpatrzenia, szczeg\u00f3\u0142y podsumowuje <a href=\"https:\/\/webhosting.de\/pl\/http2-multipleksowanie-vs-http11-wydajnosc-tlo-optymalizacja\/\">Multipleksowanie HTTP\/2<\/a> bardzo kompaktowo, aby m\u00f3c uporz\u0105dkowa\u0107 wykorzystanie kana\u0142\u00f3w i funkcj\u0119 Keep-Alive.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Parametry<\/th>\n      <th>Dyrektywa Apache<\/th>\n      <th>Dyrektywa Nginx<\/th>\n      <th>warto\u015b\u0107 orientacyjna<\/th>\n      <th>Wskaz\u00f3wka<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>Aktywacja<\/strong><\/td>\n      <td>KeepAlive W\u0142\u0105czone<\/td>\n      <td>domy\u015blnie aktywne<\/td>\n      <td>zawsze aktywowa\u0107<\/td>\n      <td>Bez ponownego wykorzystania wzrasta <strong>Nad g\u0142ow\u0105<\/strong>.<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Limit czasu<\/strong><\/td>\n      <td>KeepAliveTimeout<\/td>\n      <td>keepalive_timeout<\/td>\n      <td>2\u20135 s<\/td>\n      <td>Kr\u00f3tszy w przypadku wielu kr\u00f3tkich wywo\u0142a\u0144, d\u0142u\u017cszy w przypadku <strong>Interfejsy API<\/strong>.<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Liczba\/Conn<\/strong><\/td>\n      <td>MaxKeepAliveRequests<\/td>\n      <td>keepalive_requests<\/td>\n      <td>300\u2013500<\/td>\n      <td>Ograniczone wykorzystanie zasob\u00f3w na <strong>Klient<\/strong>.<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Wyj\u0105tki przegl\u0105darki<\/strong><\/td>\n      <td>-<\/td>\n      <td>keepalive_disable<\/td>\n      <td>selektywny<\/td>\n      <td>Wy\u0142\u0105cz dla bardzo starych <strong>Klienci<\/strong>.<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>w g\u00f3r\u0119 rzeki<\/strong><\/td>\n      <td>ProxyKeepAlive<\/td>\n      <td>upstream keepalive<\/td>\n      <td>aktywny<\/td>\n      <td>Zapewnia ponowne wykorzystanie kierunku <strong>Backend<\/strong>.<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Ograniczenia systemu operacyjnego i gniazda<\/h2>\n\n<p>Na poziomie systemu operacyjnego rzeczywist\u0105 wydajno\u015b\u0107 ograniczaj\u0105 deskryptory plik\u00f3w i parametry gniazda. Sprawdzam ulimit -n, ograniczenia proces\u00f3w i systemu oraz konfiguracj\u0119 serwera WWW (np. worker_connections w Nginx). Funkcja Keep-Alive zmniejsza liczb\u0119 nowych po\u0142\u0105cze\u0144, ale wyd\u0142u\u017ca czas, przez jaki deskryptory pozostaj\u0105 zaj\u0119te. W okresach du\u017cego nat\u0119\u017cenia ruchu mo\u017ce wyst\u0105pi\u0107 presja TIME_WAIT, gdy po\u0142\u0105czenia zamykaj\u0105 si\u0119 bardzo szybko \u2013 w tym przypadku pomocne jest przede wszystkim czyste ponowne wykorzystanie zamiast agresywnych hack\u00f3w j\u0105dra. Dokonuj\u0119 wyra\u017anego rozr\u00f3\u017cnienia mi\u0119dzy HTTP-<strong>Keep-Alive<\/strong> (protok\u00f3\u0142 aplikacji) oraz sondy TCP Keepalive j\u0105dra: te ostatnie s\u0105 czystymi pakietami sygna\u0142\u00f3w \u017cycia, kt\u00f3rych nie nale\u017cy myli\u0107 z otwartym oknem HTTP. Zmieniam domy\u015blne ustawienia j\u0105dra tylko za pomoc\u0105 punktu pomiarowego i skupiam si\u0119 przede wszystkim na samym serwerze WWW: kr\u00f3tkie, ale skuteczne limity czasu bezczynno\u015bci, ograniczona liczba \u017c\u0105da\u0144 na po\u0142\u0105czenie i rozs\u0105dne rezerwy pracownik\u00f3w.<\/p>\n\n<h2>Bezpiecze\u0144stwo: Slowloris &amp; Co. \u0142agodz\u0105 sytuacj\u0119<\/h2>\n\n<p>Zbyt hojne warto\u015bci Keep-Alive zach\u0119caj\u0105 do nadu\u017cy\u0107. Dlatego ograniczam nie tylko czasy bezczynno\u015bci, ale tak\u017ce limity czasu odczytu i tre\u015bci. W Nginx korzystam z client_header_timeout i client_body_timeout; w Apache ustawiam odpowiednie modu\u0142y z twardymi limitami odczytu, aby \u017cadne powolne \u017c\u0105dania nie blokowa\u0142y pracownik\u00f3w. Limity rozmiaru nag\u0142\u00f3wk\u00f3w i tre\u015bci \u017c\u0105da\u0144 dodatkowo zapobiegaj\u0105 nadmiernemu obci\u0105\u017ceniu pami\u0119ci. W po\u0142\u0105czeniu z umiarkowanymi oknami Keep-Alive zmniejszam ryzyko, \u017ce niewielka liczba klient\u00f3w zajmie wiele gniazd. Wa\u017cna jest kolejno\u015b\u0107: najpierw prawid\u0142owe limity czasu, nast\u0119pnie ukierunkowane limity, a na ko\u0144cu regu\u0142y zwi\u0105zane z szybko\u015bci\u0105 lub adresem IP. Tylko w ten spos\u00f3b prawdziwi u\u017cytkownicy pozostaj\u0105 szybcy, a profile atak\u00f3w nie przynosz\u0105 efektu.<\/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\/01\/keepalive_config_setup_5723.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitorowanie i testy obci\u0105\u017ceniowe<\/h2>\n\n<p>Po ka\u017cdej zmianie mierz\u0119 efekt za pomoc\u0105 narz\u0119dzi takich jak ab, wrk lub k6 i sprawdzam 95. percentyl <strong>Op\u00f3\u017anienia<\/strong>. Najpierw zmniejszam limit czasu w wyra\u017anych krokach i obserwuj\u0119, czy wzrasta liczba limit\u00f3w czasu lub przerwanych po\u0142\u0105cze\u0144; nast\u0119pnie dostosowuj\u0119 liczb\u0119 zapyta\u0144 na po\u0142\u0105czenie. R\u00f3wnolegle oceniam otwarte gniazda, obci\u0105\u017cenie pracownik\u00f3w i zapotrzebowanie na pami\u0119\u0107, aby wyeliminowa\u0107 bezczynno\u015b\u0107 we w\u0142a\u015bciwym miejscu. W przypadku powtarzaj\u0105cych si\u0119 czas\u00f3w oczekiwania warto przyjrze\u0107 si\u0119 kolejkom w backendzie, has\u0142o <a href=\"https:\/\/webhosting.de\/pl\/serwer-www-kolejkowanie-opoznienie-obsluga-zadan-kolejka-serwera\/\">Kolejkowanie serwer\u00f3w<\/a> i dystrybucja \u017c\u0105da\u0144. Kto pracuje z punktami pomiarowymi, wcze\u015bnie rozpoznaje w\u0105skie gard\u0142a i oszcz\u0119dza sobie d\u0142ugiego czasu. <strong>Rozwi\u0105zywanie problem\u00f3w<\/strong>.<\/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\/01\/webserver-keepalive-4812.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktyka logowania i metryki<\/h2>\n\n<p>Chc\u0119 sprawdzi\u0107, czy po\u0142\u0105czenia s\u0105 rzeczywi\u015bcie ponownie wykorzystywane. W Nginx rozszerzam format logu o licznik po\u0142\u0105cze\u0144 i czasy; warto\u015bci pokazuj\u0105 mi, czy klienci wysy\u0142aj\u0105 wiele \u017c\u0105da\u0144 na ka\u017cde po\u0142\u0105czenie, czy te\u017c zamykaj\u0105 je po jednym lub dw\u00f3ch trafieniach. Podobnie post\u0119puj\u0119 w przypadku Apache, aby wy\u015bwietli\u0107 liczb\u0119 \u017c\u0105da\u0144 na ka\u017cde po\u0142\u0105czenie. W ten spos\u00f3b identyfikuj\u0119 wzorce, kt\u00f3re bardziej korzystaj\u0105 z limitu czasu lub limitu \u017c\u0105da\u0144.<\/p>\n\n<pre><code># Nginx: przyk\u0142ad rozszerzonego formatu dziennika log_format main_ext '$remote_addr $request ' 'conn=$connection reqs=$connection_requests ' 'rt=$request_time uct=$upstream_connect_time';\n\naccess_log \/var\/log\/nginx\/access.log main_ext;\n<\/code><\/pre>\n\n<pre><code># Apache: LogFormat z po\u0142\u0105czeniem i czasem trwania LogFormat \"%h %r conn:%{c}L reqs:%{REQUESTS_PER_CONN}n time:%D\" keepalive CustomLog logs\/access_log keepalive\n<\/code><\/pre>\n\n<p>W monitorowaniu interesuj\u0105 mnie przede wszystkim op\u00f3\u017anienia P95\/P99, aktywne po\u0142\u0105czenia, rozk\u0142ad \u017c\u0105da\u0144\/po\u0142\u0105cze\u0144 i b\u0142\u0119dy (rosn\u0105ce 408\/499). Je\u015bli wzrosn\u0105 one przy mniejszym oknie Keep-Alive, zmniejszam nieco pr\u0119dko\u015b\u0107; je\u015bli obci\u0105\u017cenie pozostaje na sta\u0142ym poziomie, a op\u00f3\u017anienie jest lepsze, oznacza to, \u017ce znalaz\u0142em idealny punkt.<\/p>\n\n<h2>Wdra\u017canie i restartowanie<\/h2>\n\n<p>Reloady i aktualizacje s\u0105 kompatybilne z Keep-Alive, je\u015bli odpowiednio je zaplanuj\u0119. W Nginx stawiam na p\u0142ynne reloady i pozwalam pracownikom kontrolowa\u0107 po\u0142\u0105czenia zamiast ich gwa\u0142townie przerywa\u0107. Kr\u00f3tkie czasy oczekiwania pomagaj\u0105 szybciej zwolni\u0107 starych pracownik\u00f3w. W Apache u\u017cywam <strong>wdzi\u0119czny<\/strong>-Uruchom ponownie i obserwuj r\u00f3wnolegle mod_status lub strony statusu, aby nie utraci\u0107 oczekuj\u0105cych \u017c\u0105da\u0144. Przed wi\u0119kszymi wdro\u017ceniami tymczasowo zmniejszam okno Keep-Alive, aby szybciej opr\u00f3\u017cni\u0107 system, a po sprawdzeniu stabilno\u015bci przywracam je do warto\u015bci docelowej. Wa\u017cne: dokumentuj zmiany i por\u00f3wnuj je z profilami obci\u0105\u017cenia, aby nie pozosta\u0142y niezauwa\u017cone powolne <strong>regresja<\/strong> wkrada\u0107 si\u0119.<\/p>\n\n<h2>Cz\u0119ste b\u0142\u0119dy i \u015brodki zaradcze<\/h2>\n\n<p>Zbyt d\u0142ugie okna czasowe powoduj\u0105 brak aktywno\u015bci <strong>Po\u0142\u0105czenia<\/strong> otwarte i przenosz\u0105 problem do w\u0105skich garde\u0142 pracownik\u00f3w, co wyra\u017anie spowalnia nowych odwiedzaj\u0105cych. Nieograniczona liczba zapyta\u0144 na po\u0142\u0105czenie wygl\u0105da elegancko, ale w ko\u0144cu wzrasta obci\u0105\u017cenie na gniazdo, a szczyty obci\u0105\u017cenia wymykaj\u0105 si\u0119 spod kontroli. Bardzo kr\u00f3tkie okna poni\u017cej sekundy powoduj\u0105 ci\u0105g\u0142e od\u015bwie\u017canie przegl\u0105darki, co zwi\u0119ksza liczb\u0119 u\u015bcisk\u00f3w d\u0142oni i sprawia, \u017ce interfejs u\u017cytkownika dzia\u0142a nier\u00f3wno. W \u0142a\u0144cuchach proxy cz\u0119sto brakuje sp\u00f3jno\u015bci: jedno ogniwo u\u017cywa HTTP\/1.0 lub ustawia Connection: close, co blokuje ponowne wykorzystanie. Dlatego pracuj\u0119 w nast\u0119puj\u0105cej kolejno\u015bci: sprawdzam aktywacj\u0119, dostosowuj\u0119 limity czasu w ma\u0142ych krokach, dostosowuj\u0119 liczb\u0119 \u017c\u0105da\u0144 na po\u0142\u0105czenie i zwi\u0119kszam j\u0105 tylko wtedy, gdy pomiary wskazuj\u0105 rzeczywisty <strong>Korzy\u015bci<\/strong> pokaz.<\/p>\n\n<h2>Lista kontrolna do szybkiej realizacji<\/h2>\n\n<p>Najpierw aktywuj\u0119 Keep-Alive i zapisuj\u0119 aktualne <strong>Warto\u015bci<\/strong>, aby m\u00f3c w ka\u017cdej chwili cofn\u0105\u0107 si\u0119. Nast\u0119pnie ustawiam limit czasu na trzy sekundy, ponownie \u0142aduj\u0119 konfiguracj\u0119 i sprawdzam otwarte po\u0142\u0105czenia, obci\u0105\u017cenie i wodospady w interfejsie u\u017cytkownika. Je\u015bli pojawia si\u0119 wiele kr\u00f3tkich wizyt, zmniejszam limit do dw\u00f3ch sekund; je\u015bli pojawia si\u0119 wiele d\u0142ugich zapyta\u0144 API, zwi\u0119kszam limit do pi\u0119ciu do dziesi\u0119ciu sekund. Nast\u0119pnie ustawiam MaxKeepAliveRequests na 300\u2013500 i obserwuj\u0119, czy sloty pozostaj\u0105 wolne, czy te\u017c silni klienci d\u0142ugoterminowi zajmuj\u0105 je zbyt d\u0142ugo. Po ka\u017cdym kroku ponownie dokonuj\u0119 pomiar\u00f3w, dokumentuj\u0119 skutki i zachowuj\u0119 najlepsze <strong>Po\u0142\u0105czenie<\/strong> sta\u0142y.<\/p>\n\n<h2>Kr\u00f3tki bilans<\/h2>\n\n<p>Prawid\u0142owo skonfigurowana funkcja Keep-Alive pozwala zaoszcz\u0119dzi\u0107 na uzgodnieniach, zmniejsza op\u00f3\u017anienia i zapewnia serwerowi wi\u0119cej mo\u017cliwo\u015bci. <strong>Powietrze<\/strong> na \u017c\u0105danie. Dzi\u0119ki kr\u00f3tkim, ale nie zbyt kr\u00f3tkim oknom czasowym i umiarkowanej liczbie \u017c\u0105da\u0144 na po\u0142\u0105czenie host dzia\u0142a zauwa\u017calnie p\u0142ynniej. Stawiam na niewielkie zmiany z jasnymi punktami pomiarowymi, zamiast \u015blepo d\u0105\u017cy\u0107 do warto\u015bci maksymalnych. Kto konsekwentnie dostosowuje hosting, odwrotny serwer proxy i backend do ponownego wykorzystania, zyskuje szybk\u0105 interakcj\u0119 bez niepotrzebnego anga\u017cowania zasob\u00f3w. Ostatecznie liczy si\u0119 pomiar: tylko prawdziwe wska\u017aniki pokazuj\u0105, czy tuning przyni\u00f3s\u0142 oczekiwane rezultaty. <strong>Efekt<\/strong> przynosi.<\/p>","protected":false},"excerpt":{"rendered":"<p>Prawid\u0142owa konfiguracja serwera WWW Keep Alive: jak unikn\u0105\u0107 cichych spowolnie\u0144 wydajno\u015bci i podwoi\u0107 szybko\u015b\u0107 hostingu dzi\u0119ki dostosowaniu Apache i Nginx.<\/p>","protected":false},"author":1,"featured_media":16430,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-16437","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":"1685","_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":"Keep Alive Webserver","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":"16430","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/16437","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=16437"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/16437\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/16430"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=16437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=16437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=16437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}