Sziasztok!
Adott egy szerver, apache2+php5+mysql fut rajta (többek között), és az apache2-t akárhogy állítom be, lassan, de biztosan felkajálja a fizikai memóriát, aztán a swap területet is, végül "out of memory" hibával elszáll az egész kütyü. Neten keresgéltem, próbáltam többféleképpen beállítani, de mindenhogyan ez történik, csupán abban van különbség, hogy mennyi idő alatt. Mi lehet ennek az oka?
Üdv!
- 2755 megtekintés
Hozzászólások
Nekem is Apache2, PHP5 és MySQL5, de hónapokig gond nélkül működik.
Azt gyanítom, hogy leginkább valamilyen apache2 modul, vagy PHP alkalmazás lehet a ludas...
Üdv,
Dw.
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
- A hozzászóláshoz be kell jelentkezni
Igen, nekem is van itt másik szerver, amin ugyanez a hármas fut, és ott semmi gond. Hogyan lehetne kideríteni, hogy mi csinálja a fesztivált? Mert a log-ban semmi extra nincs... Valaki javasolta itt a hup-on, hogy munin-nal monitorozni kell a dolgokat, de sajnos nekem az nem monitoroz semmit.
Szóval akkor az a kérdés: hogyan deríthetem ki, ki a ludas?
- A hozzászóláshoz be kell jelentkezni
Hát ez remek!
Akkor meg tudod nézni, hogy mi a különbség a konfigurációban (verziók, beállítások) és meg tudod nézni, hogy milyen PHP alakalmazás / Apache modul fut az érintett gépen, ami a másikon nincsen.
Üdv,
Dw.
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
- A hozzászóláshoz be kell jelentkezni
a php az apache modulból fut (libapache-mod-php5) vagypedig CGI/FastCGI?
MaxRequestsPerChild mondjuk 500-ra limitálása nem oldja meg a gondot?
- A hozzászóláshoz be kell jelentkezni
Próba cseresznye... Beállítottam, most várok...
- A hozzászóláshoz be kell jelentkezni
1-2 egyeb mystic errorral egyetemben nekem akkor csinalta ezt amikor a kernel sparsememmel lett forgatva es 2.6.25 elotti volt x86_64 archon.
- A hozzászóláshoz be kell jelentkezni
Terheléstől függően a MinSpareServers, MaxSpareServers értékekkel játszahtsz, és a KeepAliveTimeout-ot vedd le 5 re.
Ha memleak van a php-ban, akkor kliens számtól függően fel fogja előbb-utóbb zabálni a memóriát.
Azt nézd meg, hogy van -e a normálisnál jóval nagyobbra nőtt apache processz.
Ez esetben a MaxRequestsPerChild-ot állítsd 0 nál nagyobbra, 5000-10000 körüli érték jó lehet indulásnak.
- A hozzászóláshoz be kell jelentkezni
MaxRequestsPerChild ez legyen kicsi szerintem (600-1000). Akkor hamarabb kihalnak a "nagyranott" processzek.
- A hozzászóláshoz be kell jelentkezni
Na beállítottam mindezeket, amiket javasoltatok, plusz sikerült a munint is beizzítani.
Idáig minden rendben volt, most viszont a swap használat meg a load felvágódott az egekbe. Érdekes, hogy a fizikai memóriából majd 90 MB szabad, mégis 170 MB körül használja a swapet. Lehet, hogy én tudom rosszul, de nem akkor kellene a swap-hez nyúlnia, ha a fizikai elfogy?
- A hozzászóláshoz be kell jelentkezni
Mialatt az előbbi üzit beírtam, a swap használat már 300 MB felett jár, a fizikai memóriából meg már több, mint 135 MB szabad...
- A hozzászóláshoz be kell jelentkezni
Kiváncsiságból nyomtam egy apache2 restartot és mindjárt helyrejött. Memória felszabadult, és megint rendben megyünk. Nem tudom mi foghatja meg...
- A hozzászóláshoz be kell jelentkezni
nézzed meg hány tcp session és vagy vár valamire, esetleg nézzed meg melyik lapot látogatják sűrün, és ott szétnézni mit használ, hátha segít abban, hogy mi okozza
- A hozzászóláshoz be kell jelentkezni
Na közben kiszúrtam, hogy egy gép keményen be akart törni brute-force-szal az ssh szerverre... iptablesben drop-olom a csomagjait, most kicsit lenyugodott a gép, kiváncsi vagyok ennek volt-e köze az ügyhöz...
- A hozzászóláshoz be kell jelentkezni
esetleg apache configban
RLimitMem
RLimitCpu
RLimitNProc
?
- A hozzászóláshoz be kell jelentkezni
Ezek szimpatikus beállítási lehetőségek, nade mi alapján állítsam őket? Hasraütés gondolom nem jó megoldás... :-D
- A hozzászóláshoz be kell jelentkezni
Tegnap ugye belőttem az apache2.conf-ban az általatok említett dolgokat. Egyszer napközben kellett egy restart csinálnom, viszoint utána úgy tűnt rendben van a cuccos. Viszont tegnap este 9 után megint "out of memory" -val elszállt. Lassan azon gondolkodom, hogy cron-ból óránként/félóránként újraindítom az apache2-t, mert ez így már siralmas.
Azt hogyan lehetne kideríteni, hogy adott apache2 process milyen fájlokat tart nyitva? lsof nekem csak a lib-eket meg a logokat hozza, mást nem (persze lehet, hogy én vagyok megnit balfék). Hátha abból kiderülne valami...
- A hozzászóláshoz be kell jelentkezni
Újraindítás előtt, és utána kb 20 perccel nézd meg mindegyik (nem csak az apache) processz méretét.
Nézd meg a kiugró eltéréseket. Lehet, hogy nem is az apache zabálja fel a memóriát.
Általában az apache panaszkodik először memóriafogyás esetén, mert ő az aki gyakran allokál és szabadít fel memóriát.
- A hozzászóláshoz be kell jelentkezni
Nnna! Most szállt el a cucc, úgy 6 óra után. Apache2 conf eleje:
Timeout 5
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
[IfModule mpm_prefork_module]
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 256
ServerLimit 256
MaxRequestsPerChild 1000
[/IfModule]
MaxRequestsPerChild alacsonyabbara vételével is ugyanez a helyzet. Viszont! Annyoit sikerült elcsípnem, hogy amikor elkezdődik a gond, akkor az apache processzek száma elkezd az egekbe menni. Konkrétan amikor utoljára meg tudtam nézni, akkor 104 futott, a top pedig az írta, hogy teljes RAM, +1,5 GB SWAP már le van foglalva. Utána már nem fértem hozzá a géphez, aztán el is szállt. HDD led ki volt merevedve, meg se villant, csak világított. Piros lámpás ház lett a szerverből... :-D
Na ilyenkor mi az ötletetek? Én már rohadtul nem tudom mit csináljak...
- A hozzászóláshoz be kell jelentkezni
nem lehet hardware hiba?? mem vagy disk hiba??
- A hozzászóláshoz be kell jelentkezni
Nem, ilyesmi nem lehet (legalábbis nagyon kicsi az esélye)...
- A hozzászóláshoz be kell jelentkezni
Maxclient-et vedd lejjebb 100 körülire, de inkább 80-ra. (100-nál többet úgysem tudsz kiszolgállni.)
Apache access logokat nézd át, mi generálja a forgalmat. Lehet, hogy valaki DOS-ol, vagy felraktak rád valami warez cuccot.
- A hozzászóláshoz be kell jelentkezni
Végre egyszer sikerült megmenteni a logokat...
error.log: (12)Cannot allocate memory: fork: Unable to fork new process
De ami még érdekesebb, az az, hogy az access.log-ban nem időrendben vannak a bejegyzések. Van olyan, hogy pölö 14:44-es bejegyzés ustán 14:31-es jön... Ez hogy a fenében lehet?
- A hozzászóláshoz be kell jelentkezni
Azt elfelejtettem megemlíteni, hogy ha félóránként újraindítgatom, akkor működik... Logokból (egyelőre) semmi nem látszik... MaxClient-et próbáltam már alacsonyabb értékkel is, akkor is ugyanez volt.
- A hozzászóláshoz be kell jelentkezni
Szia!
Ugyan ez a para van nálam is! Sokáig gond nélkül ment a server és egyszer csak lekezdte ezt játszani, hogy megtölti a 8GB memoriat és utána a swapot is szép lassan tele vágja. Sehol semmit nem találtam a logokban... egy favago megoldás van most beállítva, cronbol egy script percenként nezi a swap méretét ha eléri a 4GB-ot akkor nyom egy apache restartot és ujra minden jó.
Nálad esetleg mi lett a megoldás?
üdv
- A hozzászóláshoz be kell jelentkezni
ubuntu van fent?
Ha igen, akkor frissítsd intrepid -re.
Ez egy ubuntu specifikus apache bug. Beszoptuk mi is....
- A hozzászóláshoz be kell jelentkezni
Nem ubuntu van fent, hanem debian. Az érdekes ,hogy két tök ugyan olyan szerver van és csak egyiken jelentkezett ez a probléma.
- A hozzászóláshoz be kell jelentkezni
mytop, apachetop
status modul apache-ba (esetleg szerkeszteni a /usr/sbin/apachectl-t, ami script, en pl. az interfacet es a LYNX-et irtam at), aztan neha
/usr/sbin/apachectl fullstatus.
De en is vmelyik PHP proggira gyanakodnek, de gondolom, nem teheted meg, hogy mondjuk 24 orara kikapsolod a PHP-t es megfigyeled, akkor is elszall-e.
(Megjegyzem, nalunk a MySQL terheles miatt szallt el egy idoben, 8G mar eleg lett neki)
- A hozzászóláshoz be kell jelentkezni
Szia!
Én is valamelyik php scriptre gyanakszom , de hogyan tudom kideríteni, hogy a több ezer közül melyik lehet az. Amilyen log csak letezik mar mindent végig bogarásztam de semmi. Meg lehet nézni valahogy, hogy mi tölti a swapot? Gondolom abban szerepelni kell hogy ki milyen adatokat írt bele? Volt már verzio frissités is apachbol php-ból de az se oldotta meg.
üdv
- A hozzászóláshoz be kell jelentkezni
Probald meg az apachectl fullstatus
parancsot.
Feljebb mar irtam. Esetleg otpercenkent lefuttatod es kiiratod egy file-ba. Hatha valami tampontot ad.
(En annyit csinaltam, hogy doksiban kinezve hozzaadtam a mod.status-t, az apachectl-be beirtam az interfece-t meg a lynx helyett links kerult fel, hogy ne formazza a kimenetet) Aztan nezz utana, hogy ez az apache fullstatus milyen infokat szolgaltat, benne van, hogy egy-egy child miota fut, milyen eroforrasokat eszik, stb.
Jaigen, megoldhato az is, hogy csak akkor fusson, ha nagyon elfogy a mem. de sztem erdemesebb x idonkent meghivni es file-ba iranyitani az eredmenyt.
Aztan meg valami: ugyanez lekerdezheto a
http://szerver.cime/server-status cimen is, bar nalam be van allitva, hoyg egyedul a 127.0.0.1 cimrol kerdezheto le. Ha nincs graf. bongeszo, akkor ugye marad a links/lynx, ami meg ugyanaz, mint a fenti parancs :) Persze, ha mas IP-rol engeded, akkor egy graf. bongeszovel is nezheted realtime (beallithato, milyen gyakran frissuljon)
http://httpd.apache.org/docs/2.0/mod/mod_status.html
- A hozzászóláshoz be kell jelentkezni