Apache teljesítmény hangolás

Történt az, hogy az egyik hostolt weboldalon hirtelen megnőtt a forgalom, a webszerver meg ugyan nem térdelt le teljesen, de nagyon belassultak az oldalak, mondhatni DOS támadás érte. Eddig is voltak időnként olyanok, hogy megszalad a load a gépen, és egy Apache újraindítás után helyreállt a világrend, de nem jöttem rá mi történik. Talán most…

Az Apache Ubuntu-ban alapból úgy van beállítva, hogy a KeepAlive funkció be van kapcsolva, és a KeepAliveTimeout meg 5 másodpercen. A KeepAlive jó dolog, főleg mikor a gépen bőven van erőforrás, főleg memória, és processzor, ha adatbázisban turkálós a weboldal, akkor a háttértár is gyors, így sok szálat tud indítani a rendszer.

De ugorjunk egy kicsit vissza, hogy mi is az a KeepAlive, és miért jó. Ha a KeepAlive be van kapcsolva a szerveren, és a böngésző is támogatja (szerintem ma már nincs olyan böngésző, ami ne támogatná a HTTP1.1 miatt is), akkor amikor egy oldalt letölt a böngésző nem indít egy új HTTP, ezzel socket, kapcsolatot a szerver felé, lebontva az előzőt, minden egyes oldalelem letöltéséhez, mint a képek, CSS, JavaScript és egyéb komponensek, hanem ugyanazon a socket kapcsolaton keresztül szépen lekéri sorban az elemeket. Ez erőforrást spórol a szerver és a kliens oldalon is, de itt jön a probléma. A böngésző ezt a kapcsolatot fenntarthatja elég sokáig, az oldal letöltése után, mert hátha klikkelünk még valahová, így ezzel egy Apache szálat szépen le is foglal a szerver oldalon. Ha mondjuk van 50 szálunk a kérések kiszolgálására elvileg 50 egyszerre böngésző felhasználó el is használja az összes szálat, az 51-nek nem jut szál, valószínűleg timeout-ol a kérés. Azt nem tudom, hogy a böngészők alkalmaznak-e még párhuzamos szálakat, de régebben egy oldal eltöltéséhez több kapcsolatot is indítottak, így elég volt fele-, vagy negyedannyi böngésző is, hogy teljesen lefoglalja a szervert. Hogy ezt elkerüljük az Apache-ban van egy timeout paraméter (KeepAliveTimeout), amivel azt mondjuk meg a szervernek, hogy mennyi idő után bontsa a kapcsolatot a klienssel, ha az nem kért le semmit ezen idő alatt. Az Apache dokumentáció azt írja erről a két paraméterről, és a KeepAlive-ról magában, hogy az oldalak letöltése gyorsabb, de nagy forgalmú szerveren teljesítmény problémához vezethet. Ez történt itt is, megrohanták szervert, elfogytak a szálak, szerver elkezdett nem kiszolgálni klienseket. Miután kikapcsoltam a KeepAlive-ot a helyzet javult, ekkor már a processzor és a RAM lett kicsit kevés, de ez egy másik probléma. Most a KeepAlive be van kapcsolva, de a timeout csak 1 másodperc. Sajnos a 2.2-es Apache-ban a timeout mértékegysége a másodperc, a 2.3-asban már ezredmásodpercben is meg lehet majd adni az értéket. Szerintem a fél másodperc az ideális érték, de ez csak tipp, nem valamilyen mérés eredménye.

A bejegyzés kategóriája: Config, Linux
Kiemelt szavak: , .
Közvetlen link.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.