{"id":18737,"date":"2026-04-05T11:48:15","date_gmt":"2026-04-05T09:48:15","guid":{"rendered":"https:\/\/webhosting.de\/swap-usage-server-performance-hosting-optimus\/"},"modified":"2026-04-05T11:48:15","modified_gmt":"2026-04-05T09:48:15","slug":"zuzycie-swapu-wydajnosc-serwera-hosting-optimus","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/swap-usage-server-performance-hosting-optimus\/","title":{"rendered":"Swap Usage Server: Optymalizacja wydajno\u015bci hostingu"},"content":{"rendered":"<p>Poka\u017c\u0119 ci, jak kontrolowa\u0107 serwery wykorzystuj\u0105ce swap w ukierunkowany spos\u00f3b, tak aby obci\u0105\u017cenia hostingu nie zacina\u0142y si\u0119 pod obci\u0105\u017ceniem i nie <strong>Wykonanie<\/strong> problemy ze spustem. Wyja\u015bniam przyczyny, kluczowe dane, ustawienia podmiany, zalecenia dotycz\u0105ce rozmiaru i praktyczne kroki dostrajania dla <strong>pami\u0119\u0107<\/strong> zamiana hostingu.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Swappiness<\/strong> Redukcja: Unikaj agresywnego outsourcingu<\/li>\n  <li><strong>Rozmiar<\/strong> sprawdzi\u0107: Wyr\u00f3wnaj swap do pami\u0119ci RAM i obci\u0105\u017cenia<\/li>\n  <li><strong>IO<\/strong> chroni\u0107: Umieszczenie dysku SSD, \u015bwiadome korzystanie z Zswap\/ZRAM<\/li>\n  <li><strong>Monitoring<\/strong> ustanowi\u0107: B\u0142\u0119dy stron, kswapd, op\u00f3\u017anienie<\/li>\n  <li><strong>Obci\u0105\u017cenia<\/strong> adapt: R\u00f3wnowa\u017cenie bufor\u00f3w pami\u0119ci podr\u0119cznej i DB<\/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\/04\/serverraum-optimierung-8473.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Co tak naprawd\u0119 robi swap - i kiedy spowalnia prac\u0119<\/h2>\n\n<p>Swap rozszerza fizyczn\u0105 pami\u0119\u0107 RAM, przenosz\u0105c rzadko u\u017cywane strony na SSD lub HDD i chroni procesy przed zab\u00f3jc\u0105 OOM, co pomaga mi w sytuacjach awaryjnych. <strong>Bufor<\/strong> daje. Linux oportunistycznie odci\u0105\u017ca, aby zapewni\u0107 aktywnym stronom wi\u0119cej miejsca i zachowa\u0107 pami\u0119\u0107 podr\u0119czn\u0105 stron, ale zbyt du\u017ca aktywno\u015b\u0107 zwi\u0119ksza obci\u0105\u017cenie pami\u0119ci podr\u0119cznej. <strong>IO<\/strong>-obci\u0105\u017cenie. Gdy tylko system cz\u0119sto prze\u0142\u0105cza si\u0119 mi\u0119dzy pami\u0119ci\u0105 RAM a swapem, istnieje ryzyko thrashingu, a tym samym zauwa\u017calnego op\u00f3\u017anienia. Zw\u0142aszcza w przypadku ci\u0119\u017ckiego hostingu z PHP, baz\u0105 danych i Node.js, pami\u0119\u0107 podr\u0119czna, pracownik PHP i bufor DB konkuruj\u0105 o pami\u0119\u0107. Dlatego te\u017c utrzymuj\u0119 swap jako siatk\u0119 bezpiecze\u0144stwa, ale minimalizuj\u0119 jego u\u017cycie podczas normalnej pracy.<\/p>\n\n<h2>Rozpoznawanie symptom\u00f3w wysokiego u\u017cycia swap\u00f3w<\/h2>\n\n<p>Najpierw sprawdzam <strong>darmowy<\/strong> -h i <strong>vmstat<\/strong>, poniewa\u017c wysokie wska\u017aniki swap-in\/swap-out wskazuj\u0105 na w\u0105skie gard\u0142a. Je\u015bli wska\u017aniki pozostaj\u0105 niskie, a pami\u0119\u0107 RAM jest wolna, system zwykle dzia\u0142a normalnie i u\u017cywa wymiany tylko oportunistycznie. Je\u015bli jednak wska\u017aniki b\u0142\u0119d\u00f3w stron i kolejka IO wzrosn\u0105, op\u00f3\u017anienie aplikacji wzro\u015bnie, a \u017c\u0105dania stan\u0105 si\u0119 wolniejsze. W dziennikach widz\u0119 wskazania zaj\u0119tych pracownik\u00f3w i powolnych zapyta\u0144, kt\u00f3re pojawiaj\u0105 si\u0119 w tym samym czasie, co szczyty swap\u00f3w. Aby uzyska\u0107 wi\u0119cej informacji na temat pami\u0119ci wirtualnej, odsy\u0142am do tego kompaktowego wprowadzenia do <a href=\"https:\/\/webhosting.de\/pl\/pamiec-wirtualna-zarzadzanie-serwerem-hosting-pamiec-masowa\/\">pami\u0119\u0107 wirtualna<\/a>, co pomaga mi w kategoryzacji.<\/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\/04\/serverperformance1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Zalety i zagro\u017cenia zwi\u0105zane z hostingiem wymiany pami\u0119ci<\/h2>\n\n<p>U\u017cywam swapu do amortyzowania szczyt\u00f3w pami\u0119ci RAM i utrzymywania dzia\u0142ania krytycznych us\u0142ug, co w kr\u00f3tkim okresie mo\u017ce by\u0107 bardzo przydatne. <strong>Awaria<\/strong> jest unikane. Oznacza to, \u017ce mniejsze instancje VPS mog\u0105 zarz\u0105dza\u0107 mniejsz\u0105 ilo\u015bci\u0105 pami\u0119ci RAM, co mo\u017ce obni\u017cy\u0107 koszty w euro, o ile obci\u0105\u017cenie IO pozostaje w granicach limit\u00f3w. Je\u015bli jednak wymieniana jest zbyt du\u017ca ilo\u015b\u0107, SSD\/NVMe wyra\u017anie ust\u0119puje pami\u0119ci RAM, a \u017c\u0105dania zatrzymuj\u0105 si\u0119. Ponadto kompresja (ZRAM) kosztuje czas procesora, kt\u00f3ry aplikacje wola\u0142yby wykorzysta\u0107 do rzeczywistej pracy. Swap nie jest wi\u0119c dla mnie zamiennikiem, ale zabezpieczeniem, kt\u00f3re aktywnie kontroluj\u0119.<\/p>\n\n<h2>Swappiness: najwa\u017cniejsza \u015bruba regulacyjna<\/h2>\n\n<p>Zmienna j\u0105dra <strong>vm.swappiness<\/strong> (0-100, domy\u015blnie zwykle 60) kontroluje, jak wcze\u015bnie system odci\u0105\u017ca strony, a ja zmniejszam go do 10 dla obci\u0105\u017ce\u0144 hostingowych. Tymczasowo testuj\u0119 z <code>sysctl vm.swappiness=10<\/code>, Pisz\u0119 na sta\u0142e <code>vm.swappiness=10<\/code> w <code>\/etc\/sysctl.conf<\/code>. Na hostach SSD skutkuje to mniejsz\u0105 wymian\u0105 i wi\u0119ksz\u0105 ilo\u015bci\u0105 miejsca na pami\u0119\u0107 podr\u0119czn\u0105 stron. Nast\u0119pnie monitoruj\u0119 IO, op\u00f3\u017anienia i zestawy robocze, aby potwierdzi\u0107 efekt. Je\u015bli kluczowe liczby pozostaj\u0105 stabilne, zachowuj\u0119 ustawienie i dokumentuj\u0119 zmian\u0119 do p\u00f3\u017aniejszych audyt\u00f3w.<\/p>\n\n<h2>Optymalny rozmiar wymiany dla popularnych serwer\u00f3w<\/h2>\n\n<p>Dostosowuj\u0119 rozmiar wymiany do pami\u0119ci RAM, obci\u0105\u017cenia i ewentualnej hibernacji, poniewa\u017c znajduj\u0119 pliki, kt\u00f3re s\u0105 zbyt du\u017ce <strong>Pami\u0119\u0107<\/strong> a zbyt ma\u0142e pliki zmniejszaj\u0105 bufor. W przypadku typowych serwer\u00f3w hostingowych bez hibernacji planuj\u0119 umiarkowane warto\u015bci i przedk\u0142adam wi\u0119cej pami\u0119ci RAM nad ogromne wolumeny wymiany. W przypadku rzadkich instancji VPS, 1,5-2x RAM mo\u017ce mie\u0107 sens, dop\u00f3ki nie b\u0119dzie mo\u017cliwa prawdziwa aktualizacja. Je\u015bli masz du\u017co pami\u0119ci RAM, cz\u0119sto korzystasz z mniejszych, ale dost\u0119pnych obszar\u00f3w wymiany, aby unikn\u0105\u0107 awarii. U\u017cywam poni\u017cszej tabeli jako punktu wyj\u015bcia i dostosowuj\u0119 j\u0105 do zmierzonych warto\u015bci:<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Rozmiar pami\u0119ci RAM<\/th>\n      <th>Wymiana bez hibernacji<\/th>\n      <th>Zamiana z hibernacj\u0105<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>\u2264 2 GB<\/td>\n      <td>2x RAM<\/td>\n      <td>3x RAM<\/td>\n    <\/tr>\n    <tr>\n      <td>2-8 GB<\/td>\n      <td>= RAM<\/td>\n      <td>2x RAM<\/td>\n    <\/tr>\n    <tr>\n      <td>8-64 GB<\/td>\n      <td>4\u20138 GB<\/td>\n      <td>1,5x RAM<\/td>\n    <\/tr>\n    <tr>\n      <td>&gt; 64 GB<\/td>\n      <td>4 GB<\/td>\n      <td>Niezalecane<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/04\/server-swap-usage-optimierung-9342.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Umieszczanie swap\u00f3w i zaawansowane techniki<\/h2>\n\n<p>Wol\u0119 pliki wymiany ni\u017c partycje, poniewa\u017c mog\u0119 dynamicznie dostosowywa\u0107 rozmiary i szybciej wprowadza\u0107 zmiany. <strong>na \u017cywo<\/strong> go. Je\u015bli obszar wymiany znajduje si\u0119 na oddzielnym dysku SSD, w mniejszym stopniu konkuruje z systemem operacyjnym o IO. W przypadku bardzo ma\u0142ych maszyn wirtualnych u\u017cywam Zswap lub ZRAM jako testu w celu zmniejszenia IO, ale bacznie obserwuj\u0119 wykorzystanie procesora. Ograniczam nadmierne zaanga\u017cowanie i ustawiam limity dla us\u0142ug, aby \u017caden proces nie doprowadzi\u0142 maszyny do awarii. Ostatecznie liczy si\u0119 wymierny efekt: mniejsze op\u00f3\u017anienia, cichsze IO i sp\u00f3jne czasy odpowiedzi.<\/p>\n\n<h2>Monitorowanie: kt\u00f3re kluczowe dane naprawd\u0119 si\u0119 licz\u0105<\/h2>\n\n<p>Mierz\u0119 wykorzystanie pami\u0119ci RAM, pami\u0119ci podr\u0119cznej stron, swap in\/out, aktywno\u015b\u0107 <strong>kswapd<\/strong> i kolejki IO, poniewa\u017c te warto\u015bci wysy\u0142aj\u0105 mi sygna\u0142y na wczesnym etapie. Je\u015bli ruch wymiany wzrasta, koreluj\u0119 to z op\u00f3\u017anieniami aplikacji i czasami zapyta\u0144. Sprawdzam r\u00f3wnie\u017c b\u0142\u0119dy strony mniejszej\/wi\u0119kszej, aby rozpozna\u0107 kosztowne dost\u0119py do pami\u0119ci. Aby pom\u00f3c mi zrozumie\u0107 strategie buforowania, u\u017cywam tego przewodnika do <a href=\"https:\/\/webhosting.de\/pl\/wykorzystanie-pamieci-ram-serwera-hosting-bufor-cache-wolne-zasoby-cache-tuning\/\">Wykorzystanie bufora i pami\u0119ci podr\u0119cznej<\/a>. Interweniuj\u0119 i zmieniam ustawienia tylko wtedy, gdy wska\u017aniki i dzienniki pokazuj\u0105 sta\u0142\u0105 presj\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\/2026\/04\/swap_server_performance_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Jak j\u0105dro wybiera strony: g\u0142\u0119bsze spojrzenie na Reclaim<\/h2>\n\n<p>Aby dostroi\u0107 si\u0119 w ukierunkowany spos\u00f3b, rozumiem wewn\u0119trzne listy: Linux rozr\u00f3\u017cnia anonimowe strony (sterty\/stacki) i strony obs\u0142ugiwane przez pliki (pami\u0119\u0107 podr\u0119czna stron). Obie s\u0105 do\u0142\u0105czone do list LRU (aktywne\/nieaktywne). Je\u015bli pami\u0119\u0107 jest pod presj\u0105, j\u0105dro najpierw pr\u00f3buje odrzuci\u0107 nieaktywne strony oparte na plikach (szybko, poniewa\u017c mo\u017cna je ponownie za\u0142adowa\u0107 z dysku). Je\u015bli zbyt wiele anonimowych stron jest aktywnych, musi przenie\u015b\u0107 je do swapu - jest to bardziej kosztowne. Wysoki <code>vm.vfs_cache_pressure<\/code> Przyspiesza odrzucanie z\u0105bk\u00f3w\/w\u0119z\u0142\u00f3w, co zwalnia miejsce, ale mo\u017ce prowadzi\u0107 do wi\u0119kszej liczby dost\u0119p\u00f3w do plik\u00f3w na serwerach internetowych. Zwykle utrzymuj\u0119 go na poziomie oko\u0142o 50-100 i obserwuj\u0119, jak zmienia si\u0119 wsp\u00f3\u0142czynnik trafie\u0144 pami\u0119ci podr\u0119cznej i op\u00f3\u017anienia.<\/p>\n\n<p>Wp\u0142ywam na \u015bcie\u017cki pisania poprzez <code>vm.dirty_background_bytes<\/code>\/<code>vm.dirty_bytes<\/code> (lub warianty proporcji). Zbyt wysokie limity brudnej pami\u0119ci tylko odsuwaj\u0105 problem w czasie, a p\u00f3\u017aniej generuj\u0105 du\u017ce zapisy zwrotne, kt\u00f3re spowalniaj\u0105 odzyskiwanie swap\u00f3w. Preferuj\u0119 limity oparte na bajtach, poniewa\u017c dzia\u0142aj\u0105 one bardziej precyzyjnie na du\u017cych systemach RAM. Innym rozwi\u0105zaniem jest <code>vm.min_free_kbytes<\/code>Je\u015bli ta warto\u015b\u0107 jest ustawiona zbyt nisko, odzyskiwanie dzia\u0142a w gor\u0105czkowych cyklach; zbyt wysoka, marnuje pami\u0119\u0107 RAM. Zwykle pozostawiam t\u0119 warto\u015b\u0107 na domy\u015blnym poziomie dystrybucji, chyba \u017ce konsekwentnie widz\u0119 \u201eniskie wolne znaki wodne\u201c w dmesg.<\/p>\n\n<h2>PSI i kswapd: Prawid\u0142owa interpretacja wska\u017anik\u00f3w wyprzedzaj\u0105cych<\/h2>\n\n<p>Opr\u00f3cz klasycznych wska\u017anik\u00f3w, u\u017cywam <em>Informacje dotycz\u0105ce przeci\u0105\u017cenia<\/em> na stronie <code>\/proc\/pressure\/memory<\/code>. Wysoki <code>niekt\u00f3re<\/code> lub <code>pe\u0142ny<\/code> Warto\u015bci powy\u017cej kilku sekund pokazuj\u0105 mi, \u017ce zadania oczekuj\u0105 na pami\u0119\u0107. Jest to cz\u0119sto pierwsza oznaka, zanim u\u017cytkownicy zauwa\u017c\u0105 op\u00f3\u017anienia. W tym samym czasie patrz\u0119 na czas procesora CPU <strong>kswapd<\/strong>Je\u015bli stale wzrasta powy\u017cej kilku procent, Reclaim dzia\u0142a na gor\u0105co. Z <code>vmstat 1<\/code> Zwracam uwag\u0119 na <code>si<\/code>\/<code>Tak wi\u0119c<\/code> (swap-in\/out) i <code>r<\/code>\/<code>b<\/code> (kolejka run\/block). Konsekwentnie wysoki <code>Tak wi\u0119c<\/code>-warto\u015bci wraz z rosn\u0105cymi <code>b<\/code>-wtedy konsekwentnie interweniuj\u0119.<\/p>\n\n<h2>Cgroups v2 i systemd: Celowe ograniczenie swap\u00f3w<\/h2>\n\n<p>W \u015brodowiskach z wieloma dzier\u017cawcami lub kontenerami zapobiegam sytuacji, w kt\u00f3rej pojedyncza us\u0142uga poch\u0142ania wszystkie rezerwy. W cgroups v2 ustawiam <code>memory.max<\/code> (twardy limit), <code>memory.high<\/code> (mi\u0119kkie ssanie) i <code>memory.swap.max<\/code> (limit wymiany). Pod systemd u\u017cywam per us\u0142uga <code>MemoryMax=<\/code>, <code>MemoryHigh=<\/code> oraz <code>MemorySwapMax=<\/code> w nadpisaniach jednostek. Oznacza to, \u017ce PHP-FPM nie mo\u017ce doprowadzi\u0107 ca\u0142ego systemu do swapu, podczas gdy bazy danych pozostaj\u0105 reaktywne. W przypadku serii, w\u0105ski <code>memory.high<\/code> plus umiarkowany <code>MemorySwapMax=<\/code>, zamiast ryzykowa\u0107 ci\u0119\u017ckie OOM. Dokumentuj\u0119 te limity dla ka\u017cdej us\u0142ugi i aktualizuj\u0119 je w procesie przegl\u0105du.<\/p>\n\n<h2>Tw\u00f3rz, powi\u0119kszaj i nadawaj priorytety plikom wymiany w czysty spos\u00f3b<\/h2>\n\n<p>W praktyce potrzebuj\u0119 szybkich, powtarzalnych krok\u00f3w:<\/p>\n<ul>\n  <li>Utw\u00f3rz plik wymiany: <code>fallocate -l 8G \/swapfile &amp;&amp; chmod 600 \/swapfile &amp;&amp; mkswap \/swapfile<\/code><\/li>\n  <li>Aktywuj: <code>swapon \/swapfile<\/code>; na sta\u0142e przez <code>\/etc\/fstab<\/code> z <code>\/swapfile none swap sw,pri=5 0 0<\/code><\/li>\n  <li>Dostosuj rozmiar: <code>swapoff \/swapfile<\/code>, <code>fallocate -l 12G \/swapfile<\/code>, <code>mkswap \/swapfile<\/code>, <code>swapon \/swapfile<\/code><\/li>\n  <li>Wielokrotna wymiana: szybsza NVMe z wy\u017csz\u0105 wydajno\u015bci\u0105 <code>pri<\/code> ustala\u0107 priorytety; z <code>swapon --show --output=NAME,PRIO,SIZE,USED<\/code> kontrola<\/li>\n<\/ul>\n<p>Na bardzo s\u0142abych systemach IO wol\u0119 zmniejszy\u0107 rozmiar swapu lub umie\u015bci\u0107 go na szybszych no\u015bnikach danych, ni\u017c pozwoli\u0107 systemowi powoli \u201ezamieni\u0107 si\u0119 na \u015bmier\u0107\u201c.<\/p>\n\n<h2>Zswap i ZRAM: kiedy kompresja naprawd\u0119 pomaga<\/h2>\n\n<p>Zswap kompresuje strony do wymiany w puli opartej na pami\u0119ci RAM, a tym samym zmniejsza fizyczne IO. Chroni to dyski SSD, ale kosztuje czas procesora. W przypadku maszyn wirtualnych z kilkoma rdzeniami najpierw testuj\u0119 lz4 (szybka, s\u0142absza kompresja) i obserwuj\u0119, czy szczyty CPU rosn\u0105. Selektywnie zast\u0119puj\u0119 ZRAM klasycznym swapem w bardzo ma\u0142ych instancjach, aby pozosta\u0107 prawie bez IO - planuj\u0119 na to wi\u0119cej CPU. Celowo utrzymuj\u0119 ma\u0142\u0105 kompresj\u0119 (np. 25-50% RAM dla ZRAM), aby unikn\u0105\u0107 tworzenia nowych w\u0105skich garde\u0142. Gdy tylko obci\u0105\u017cenia zwi\u0105zane z procesorem zaczn\u0105 si\u0119 potyka\u0107, zmieniam t\u0119 optymalizacj\u0119.<\/p>\n\n<h2>THP i fragmentacja: ukryte hamulce op\u00f3\u017anie\u0144<\/h2>\n\n<p>Transparent Huge Pages (THP) mo\u017ce pom\u00f3c w przypadku maszyn JVM lub baz danych, ale mo\u017ce r\u00f3wnie\u017c obci\u0105\u017ca\u0107 odzyskiwanie i wymian\u0119 w mieszanych \u015brodowiskach hostingowych. U\u017cywam THP na <code>madvise<\/code>, tak, aby korzysta\u0142y z niej tylko te obci\u0105\u017cenia, kt\u00f3re wyra\u017anie jej u\u017cywaj\u0105. W przypadku zauwa\u017calnej fragmentacji pami\u0119ci, planuj\u0119 krocz\u0105ce restarty us\u0142ug intensywnie korzystaj\u0105cych z pami\u0119ci, aby wyczy\u015bci\u0107 sterty, kt\u00f3re zosta\u0142y wystrzelone. W przypadku MySQL\/MariaDB sprawdzam r\u00f3wnie\u017c, czy pula bufor\u00f3w InnoDB jest wystarczaj\u0105co du\u017ca w stosunku do ca\u0142kowitej pami\u0119ci, aby Linux page cache nie g\u0142odowa\u0142 - zduplikowane cache kosztuj\u0105 RAM i niepotrzebnie zwi\u0119kszaj\u0105 swap.<\/p>\n\n<h2>NUMA i hosty wielogniazdowe<\/h2>\n\n<p>NUMA odgrywa rol\u0119 na wi\u0119kszych hostach bare-metal. Niezr\u00f3wnowa\u017cony dost\u0119p do pami\u0119ci zwi\u0119ksza op\u00f3\u017anienia i przyspiesza odzyskiwanie. Rozdzielam obci\u0105\u017cenia pomi\u0119dzy <code>numactl --interleave=all<\/code> lub przypi\u0105\u0107 okre\u015blone us\u0142ugi do w\u0119z\u0142a. Utrzymuj\u0119 krytyczne us\u0142ugi, kt\u00f3re wyzwalaj\u0105 wiele dost\u0119p\u00f3w do pami\u0119ci podr\u0119cznej stron (np. Nginx) w pobli\u017cu \u015bcie\u017cek danych; hermetyzuj\u0119 zadania wsadowe wymagaj\u0105ce du\u017cej ilo\u015bci pami\u0119ci i w razie potrzeby nadaj\u0119 im \u015bci\u015blejsze limity cgroup, aby przepe\u0142nienia NUMA nie zepchn\u0119\u0142y ca\u0142ego systemu na swap.<\/p>\n\n<h2>Diagnostyka proces\u00f3w: kto tak naprawd\u0119 wymienia?<\/h2>\n\n<p>Kiedy wska\u017aniki systemowe w\u0142\u0105czaj\u0105 alarm, identyfikuj\u0119 przyczyny na poziomie procesu: <code>smem -knr<\/code> pokazuje mi PSS\/USS (realistyczne udzia\u0142y pami\u0119ci), <code>pmap -x<\/code> rozk\u0142ad segment\u00f3w. W <code>\/proc\/\/status<\/code> Sprawdzam <code>VmRSS<\/code>, <code>VmSwap<\/code> oraz <code>oom_score_adj<\/code>. Wysoki <code>VmSwap<\/code>-warto\u015bci dla wzorc\u00f3w nieprzyjaznych LRU (wiele anonimowych, ma\u0142o u\u017cywanych stron) s\u0105 kandydatami do ogranicze\u0144 lub optymalizacji kodu. U\u017cywam r\u00f3wnie\u017c <code>pidstat -r 1<\/code>, aby zobaczy\u0107 wska\u017aniki b\u0142\u0119d\u00f3w na proces i por\u00f3wna\u0107 je z op\u00f3\u017anieniami aplikacji.<\/p>\n\n<h2>Runbooki, SLO i poziomy eskalacji<\/h2>\n\n<p>Definiuj\u0119 wyra\u017ane warto\u015bci graniczne dla ka\u017cdej klasy hosta, np.: kswapd-CPU &lt; 5% w \u015bredniej 5-minutowej, g\u0142\u00f3wne b\u0142\u0119dy &lt; 50\/rdze\u0144 podczas normalnej pracy, pami\u0119\u0107 PSI <code>niekt\u00f3re<\/code> &lt; 10% powy\u017cej 60s. Je\u015bli dwie metryki s\u0105 uszkodzone w tym samym czasie, interweniuj\u0119 w nast\u0119puj\u0105cej kolejno\u015bci: sprawdzam swappiness, tymczasowo d\u0142awi\u0119 pracownik\u00f3w\/bufory, dostosowuj\u0119 rozmieszczenie i priorytety swap\u00f3w, (de)aktywuj\u0119 kompresj\u0119, w razie potrzeby zwi\u0119kszam pami\u0119\u0107 RAM. Te runbooki s\u0105 cz\u0119\u015bci\u0105 mojej reakcji na incydenty, dzi\u0119ki czemu zespo\u0142y mog\u0105 dzia\u0142a\u0107 w powtarzalny spos\u00f3b i <strong>Op\u00f3\u017anienie<\/strong> pozostaje pod kontrol\u0105.<\/p>\n\n<h2>Rozwi\u0105zywanie problem\u00f3w: typowe przyczyny i szybkie rozwi\u0105zania<\/h2>\n\n<p>Je\u015bli szybko\u015b\u0107 wymiany wzrasta, najpierw sprawdzam us\u0142ugi wymagaj\u0105ce du\u017cej ilo\u015bci pami\u0119ci i ograniczam je za pomoc\u0105 <strong>cgroups<\/strong> lub ustawienia us\u0142ugi. Nast\u0119pnie sprawdzam, czy nie ma zbyt wielu pracownik\u00f3w PHP, zbyt du\u017cych bufor\u00f3w DB lub zbyt ma\u0142ej pami\u0119ci podr\u0119cznej stron. Zmniejszam swappiness, porz\u0105dkuj\u0119 tymczasowe cache i przenosz\u0119 rotacje log\u00f3w z godzin szczytu. Je\u015bli kolejka IO pozostaje stale wysoka, przenosz\u0119 swap lub zmniejszam go, aby zminimalizowa\u0107 konkurencj\u0119 IO. Je\u015bli to nie wystarczy, zwi\u0119kszam pami\u0119\u0107 RAM i mierz\u0119 ponownie, a\u017c op\u00f3\u017anienie pozostanie stabilne na niskim poziomie.<\/p>\n\n<h2>Tuning dla PHP, baz danych i Node.js<\/h2>\n\n<p>W przypadku PHP maksymalizuj\u0119 trafienia pe\u0142nostronicowe lub OPcache, aby mniej pami\u0119ci RAM by\u0142o u\u017cywane do wielokrotnej kompilacji, a tym samym <strong>Czas reakcji<\/strong> spadki. W MySQL\/MariaDB r\u00f3wnowa\u017c\u0119 pul\u0119 bufor\u00f3w i pami\u0119\u0107 podr\u0119czn\u0105 zapyta\u0144 z pami\u0119ci\u0105 podr\u0119czn\u0105 stron, aby unikn\u0105\u0107 podw\u00f3jnego buforowania. W przypadku Node.js ustawiam limity dla sterty i monitoruj\u0119 od\u015bmiecanie, tak aby <strong>P\u0119tla zdarze\u0144<\/strong> nie s\u0142abnie. Zapobiegam r\u00f3wnie\u017c fragmentacji pami\u0119ci poprzez wdro\u017cenia, kt\u00f3re regularnie restartuj\u0105 us\u0142ugi i wykrywaj\u0105 wycieki. Kr\u00f3tkie, dog\u0142\u0119bne spojrzenie na <a href=\"https:\/\/webhosting.de\/pl\/fragmentacja-pamieci-hosting-php-mysql-optymalizacja-przeplyw-bajtow\/\">Fragmentacja pami\u0119ci<\/a> pomaga szybciej wykrywa\u0107 takie problemy.<\/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\/04\/entwickler_schreibtisch_swap_5647.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kontenery i stosy hostingowe: praktyczne przyk\u0142ady<\/h2>\n\n<p>W \u015brodowiskach kontenerowych ustawiam twardy limit pami\u0119ci na kapsu\u0142\u0119 lub us\u0142ug\u0119 i zezwalam tylko na umiarkowan\u0105 ilo\u015b\u0107 wymiany. W przypadku PHP-FPM obliczam pami\u0119\u0107 na pracownika (RSS) plus zapas na pami\u0119\u0107 podr\u0119czn\u0105 strony. Przyk\u0142ad: 512 MB RAM, 30 MB\/worker realnego zu\u017cycia - wtedy 8-10 worker\u00f3w jest realistyczne, a nie 20. Dla Node.js ustawiam <code>--max-old-space-size<\/code> Celowo poni\u017cej fizycznego limitu, aby GC nie by\u0142 pod presj\u0105, a j\u0105dro nie agresywnie wymienia\u0142o anonimow\u0105 pami\u0119\u0107. W przypadku baz danych planuj\u0119 sta\u0142e bud\u017cety, oddzielam je od warstwy internetowej tam, gdzie to mo\u017cliwe i daj\u0119 systemowi operacyjnemu wystarczaj\u0105co du\u017co miejsca na pami\u0119\u0107 podr\u0119czn\u0105 plik\u00f3w.<\/p>\n\n<h2>Koszty, sprz\u0119t i kiedy zaktualizowa\u0107 pami\u0119\u0107 RAM<\/h2>\n\n<p>Obliczam r\u00f3wnowa\u017cne warto\u015bci w euro: Je\u015bli drukowanie swap\u00f3w tworzy sta\u0142e op\u00f3\u017anienie, dodatkowa pami\u0119\u0107 RAM szybko uzasadnia cen\u0119 i tworzy rzeczywiste op\u00f3\u017anienie. <strong>Wydajno\u015b\u0107<\/strong>. NVMe zmniejsza op\u00f3\u017anienia we\/wy, ale nie zast\u0119puje pami\u0119ci lotnej. Zanim rozbuduj\u0119 sprz\u0119t, optymalizuj\u0119 swappiness, bufory i liczb\u0119 pracownik\u00f3w, aby zwi\u0119kszy\u0107 wydajno\u015b\u0107. Je\u015bli wykorzystanie pozostaje wysokie, planuj\u0119 skok pami\u0119ci RAM w rozs\u0105dnych etapach, zamiast po prostu zwi\u0119ksza\u0107 swap. Taka sekwencja zapobiega z\u0142ym inwestycjom i daje mi jasne punkty pomiarowe do p\u00f3\u017aniejszych por\u00f3wna\u0144.<\/p>\n\n<h2>Sprawdzenie: wymiana serwera w ci\u0105gu 15 minut<\/h2>\n\n<p>Zaczynam od <code>free -h<\/code>, <code>vmstat 1<\/code> i sprawdzi\u0107 <strong>Zamiana<\/strong>-ruch, b\u0142\u0119dy stron i kolejki IO. Nast\u0119pnie ustawi\u0142em <code>vm.swappiness=10<\/code>, obci\u0105\u017cenie <code>sysctl<\/code> i obserwuj\u0119 kluczowe dane przez pi\u0119\u0107 minut. Je\u015bli pasuje, zapisuj\u0119 ustawienie i dokumentuj\u0119 bie\u017c\u0105cy stan. W nast\u0119pnym kroku poprawiam liczb\u0119 pracownik\u00f3w i bufory DB, kt\u00f3re wypieraj\u0105 pami\u0119\u0107 podr\u0119czn\u0105 stron. Na koniec tworz\u0119 alarmy, kt\u00f3re ostrzegaj\u0105 mnie przed warto\u015bciami odstaj\u0105cymi, zanim zauwa\u017c\u0105 je u\u017cytkownicy.<\/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\/04\/server-optimierung-c456.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>U\u017cywam Swap jako uprz\u0119\u017cy bezpiecze\u0144stwa, ale utrzymuj\u0119 jej u\u017cycie na niskim poziomie, aby <strong>Op\u00f3\u017anienie<\/strong> nie eksploduje i nie wyst\u0119puj\u0105 \u017cadne problemy z wydajno\u015bci\u0105. Najwi\u0119ksz\u0105 d\u017awigni\u0105 pozostaje rozs\u0105dna wymiana, w po\u0142\u0105czeniu z rozmiarem wymiany, kt\u00f3ry pasuje do pami\u0119ci RAM i obci\u0105\u017cenia. Monitoruj\u0119 kswapd, b\u0142\u0119dy stron i kolejk\u0119 IO, por\u00f3wnuj\u0119 warto\u015bci z dziennikami aplikacji i dzia\u0142am wcze\u015bnie. W przypadku mniejszych serwer\u00f3w VPS zamiana pami\u0119ci hostingu \u0142agodzi presj\u0119 w kr\u00f3tkim okresie, podczas gdy prawdziwa ulga przychodzi wraz z wi\u0119ksz\u0105 ilo\u015bci\u0105 pami\u0119ci RAM. Post\u0119powanie zgodnie z t\u0105 sekwencj\u0105 zapewni responsywno\u015b\u0107 serwer\u00f3w, skr\u00f3ci przestoje i ochroni bud\u017cety.<\/p>","protected":false},"excerpt":{"rendered":"<p>Prawid\u0142owe zarz\u0105dzanie serwerami wykorzystuj\u0105cymi swap: Unikaj problem\u00f3w z wydajno\u015bci\u0105 hostingu wykorzystuj\u0105cego swap pami\u0119ci. Wskaz\u00f3wki dotycz\u0105ce stabilnej wydajno\u015bci serwera.<\/p>","protected":false},"author":1,"featured_media":18730,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-18737","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"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":"434","_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":"Swap Usage Server","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":"18730","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/18737","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=18737"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/18737\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/18730"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=18737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=18737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=18737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}