Egy Debianon futót Apache szerver memóriaigényét szeretném megérteni. Az apache processzek memóriafelhasználását a ps segítségével vizsgálom (-o rss).
Teszt környezetben egy-egy kérelem kiszolgálására 16MB memóriát használ, míg éles környezetben 126MB-ot. (Csak statikus kérelem esetén is.) Konfigurációk, modulok azonosak, csak a VirtualHost-ok számában és a gépek teljesítményében van lényeges eltérés.
Mi okozhat ilyen jelentős különbséget egy-egy kérelem kiszolgálásának memóriaigénye között?
Megoldás:
Prefork módban minden kérelmet kiszolgáló processz betölti a saját memóriájába a teljes konfigurációt, így a kérelmenként lefoglalt memória mérete arányosan nő a VirtualHost-ok számával.
Részletek a hozzászólásokban
- 473 megtekintés
Hozzászólások
Mindezt milyen MPM modullal? Prefork? Worker? Bármimás?
- A hozzászóláshoz be kell jelentkezni
prefork
- A hozzászóláshoz be kell jelentkezni
Érdekel.
- A hozzászóláshoz be kell jelentkezni
ha van mod_php akkor prefork apache esetén a teljes modul - opcode cache-el együtt- ott van minden egyes apache processzben.
- A hozzászóláshoz be kell jelentkezni
Köszönöm, nagyon jó ötlet volt!
A teszt környezetben a mod_php7 kikapcsolása 15MB-ról 9MB-ra csökkentette a kérelmenkénti memóriaigényt.
Éles környezetben is kikapcsoltam ezért a php7 modult, és átirányítottam php-fpm-re. Azonban továbbra is 123MB memóriát foglal le kérelmenként. Ez néha felmegy akár 140MB-ra is.
A memóriaigény független attól is, hogy http vagy https-e a kérelem.
:(
- A hozzászóláshoz be kell jelentkezni
"A memóriaigény független attól is, hogy http vagy https-e a kérelem. "
huhh. vissza az alapokhoz :(
- A hozzászóláshoz be kell jelentkezni
Ha php-fpm -re váltottál, akkor kapcsold át az Apache-ot prefork-ról worker, vagy event modellre.
Ha bármi egyéb miatt szükség van a prefork modellre, akkor nézd át a többi modult is, és kapcsold ki ami nem kell. (Prefork esetén minden modul benne van minden processzben.)
Ez security szempontból sem rossz lépés.
https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
An associated question that arises here is, of course, what modules you need, and which ones you don't. The answer here will, of course, vary from one web site to another. However, the minimal list of modules which you can get by with tends to include
mod_mime
,mod_dir
, andmod_log_config
.mod_log_config
is, of course, optional, as you can run a web site without log files. This is, however, not recommended.
- A hozzászóláshoz be kell jelentkezni
Egyrészt értem én, másrészt mégsem, hisz minden modul a teszt gépen is benne van minden processzben, mégis már csak 9MB egy-egy processz memóriaigénye.
A teszt környezetben kipróbáltam a worker és event modulokat is, de mindegyikkel több, 10-11MB a processzenkénti meóriaigény.
Ennek ellenére ki fogom próbálni éles környezetben is a modellváltást, de továbbra sem értem, mi eszik annyi memóriát az éles környezetben.
- A hozzászóláshoz be kell jelentkezni
Azert azt is nezd meg, hogy a teszt es eles kornyezetben ugyanolyan modul toltodik-e be, vagy mondjuk elesen a php modul meg maga ala berant-e kismillio mas modult is (php conf).
Szerk: reload vs restart. talakoztam olyan apache modullal, ami a reloadot rosszul viselte, es betoltotte magat megegyszer (valami audit modul volt emlekeim szerint).
- A hozzászóláshoz be kell jelentkezni
Köszönöm a javaslatot, végül ez lett a megoldás.
Ráadásul worker módban, az éles környezetben egy-egy processz amellett, hogy több kérelmet is képes kiszolgálni, még önmagában is kevesebb memóriát foglalt le. A konkrét esetben a 126MB helyett már csak 90MB körül.
Az event modellt nem próbáltam, mivel a worker is lényeges javulást eredményezett.
Azt már csak gyanítom, hogy a mod_php miatt lett az alapértelmezett modell a prefork.
- A hozzászóláshoz be kell jelentkezni
" Azt már csak gyanítom, hogy a mod_php miatt lett az alapértelmezett modell a prefork. "
Ez így van. A mod_php nem thread-safe, worker vagy event modell esetén képes érdekes dolgokat produkálni.
- A hozzászóláshoz be kell jelentkezni
Mi okozhat ilyen jelentős különbséget egy-egy kérelem kiszolgálásának memóriaigénye között?
Az nginx? :)
- A hozzászóláshoz be kell jelentkezni
Igen, .htaccess nélkül az élet gyönyörű!
- A hozzászóláshoz be kell jelentkezni
Lehet hogy nem file-okat kell a netre feltolni gondolkodas nelkul, csak ugy, passiobol hanem... helyette tartalomkezelest csinalni? Hja :/
- A hozzászóláshoz be kell jelentkezni
Jobb híján csinálj egy memory dumpot (gcore) a processről és nézz bele pl strings-szel, hátha rájössz, hogy mi az a sok memória amit megeszik.
- A hozzászóláshoz be kell jelentkezni