apache rengeteg process

Fórumok

Sziasztok,

Egy olyan problémám van, hogy a webszerveremet egyszerre "támadja" kb. 2000 felhasználó, ez azt jelenti a gyakorlatban h. iszonyat sok apache process gyülemlik fel a gépen. Tulajdonképpen az erőforrásokkal nincsen semmi baj, bírja, csak a munin grafikonokon azt vettem észre h. a "committed" memória kissé elszállt (20Gb), ami viszont nem tesz jót a gépnek. Hogyan lehet megoldani apache-al, hogy kevesebb process is ki tudja szolgálni ezt a 2000 egyidőben támadó klienst? A prefork-ról érdemes lenne váltani workerre? Amin módosítottam, hogy ez egyátalán létre jöhessen az a MaxClients megemelése 2000-re és a ServerLimit ehhez igazítása.
Nem php, nem sql, csak egy mod_proxy ami 1-2-3 backend felé tolja a kéréseket.

Előre is köszi,
Zoli

Hozzászólások

Ebben az esetben (semmi extra modul), akkor felejtsd el a prefork workert és használd helyette a apache2-mpm-worker -t, ami a threaded változat. Elképesztő lesz a különbség :)

Navájá, eredetileg az volt, hogy nincs php csak egy load balancer, azaz kb. ennyi:

[Proxy balancer://accluster]
BalancerMember http://192.168.5.101:80
BalancerMember http://192.168.5.102:80
BalancerMember http://192.168.5.103:80
[/Proxy]

ProxyPass / balancer://accluster/
ProxyPassReverse / balancer://accluster/

ProxyRequests Off

Ehhez jó a threaded worker.

Hi,

Ha valodi a forgalom akkor ideje skalazasban gondolkodni. Ha inkabb valami kisgyerek-jaccik-apucibotnetjevel akkor amugy megeri beconfiguralni az apache-t, sokat tud segiteni ;)

Nyilvan a prefork problemaja hogy forkolgat child-okat azok meg mind zabaljak a memoriat.

Elsonek megprobalhatod felrakni a MaxRequestsPerChild -ot 4000k korulire. Feljebb es 0 ra nemfeltetlenul erdemes. memleak ha joltom jellemzo problema lehet folleg php-val.

maxclients-et rakd fel valahol 750 kornykere az mar eleg lesz, ha a timeoutokat leszeded, keepalive-ot kikapcsolod a min es a max spare servert is beconfolod egy normalis mertekig es birni fogja es nem fog tulfoglalni ramot meg ilyesmi.

fgci-t es worker-t cska akkor javasolnam ha effektiv nem letfontossagu az oldal amit kiszolgalsz ugyanis szereti dobalni az 500akat kb minden 100k requestnel azonkivul ha prefork configja se megy akkor fcgi-vel irtozatosan sok bajod lesz es csak roszabb lesz.

Sokat segitene ha bemasolnad apache configod idevago reszeit.

hf gl

drk

Hali, a konfigja megy, de a gondom továbbra is az, hogy a backendem egy olyan service amihez egy halom élő kapcsolat kell. Az hogy ez milyen az egy dolog, ezen nem tudok változtatni.
Jelenleg is valami hasonló van konfigolva amit írsz és így is rettenetesen sok a process és baromira akarja a memóriát :)
A worker configjával és az fcgi konfigjával semmi hiba sincs, máshol használom és teljesen jól működik, a kérdés inkább az volt h. azzal mennyit lehet ilyen esetben nyerni.

Én elgondolkoznék valami párhuzamosítási megoldáson ekkora felhasználószámnál. pl: RRDNS, IPVS

IPVS-hez elég egy alap gép viszont TCP/IP szinten szét tudja osztani a terhelést X gép közt.
(Képes figyelni a szolgáltatás állapotát is a terhelésviselő elemeken)

Ez mögött még mindíg alkalmazhatsz mod_proxy-t bár a szükségessége megkérdöjelezhető, vagy legalábbis nem minden helyzetben optimális.
(Ha minden domaint minden terhelésviselő kiszolgál és nem történik más speciális átirányítás akkor értelmetlen.
Ha domaintől függ, hogy melyik gépre/gépekre kell továbbítani a forgalmat, akkor már a mod_proxy a megoldás)

Ezek mellett persze elég sok erőforrást és időt tudsz megspórolni valamilyen cache alkalmazást iktatsz a mod_proxy és a terhelésviselők közé.
Így a rengeteg felhasználói kérés elég tetemes hányada már el se jut a terhelésviselőkig illetve gyorsabban átfut a rendszeren, ami megintcsak erőforrást jelent neked.

Persze mindenzt felboríthatja a project által hozott korlátok.