Apache2 megeszi az összes memoriát és a swapot

Sziasztok,

Kellene egy kis segítség mert már nem sok ötletem maradt, hogy megoldást találjak.
Adott egy webszerver , ami hónapok óta gond nélkül megy, de kb 1 hete egyszer csak elkezdte felzabalni a memorát, 8GB mem és 8GB swap.
Mind ezt random indőközönként teszi szerver terheléstől függetlenül. Az apache elött figyel egy nginx proxy.

Config ide vágó része:

StartServers 5
ServerLimit 24
MaxClients 600
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 1000

Kb 5 perce indítottam ujra az apache-ot és már 6GB felett van a memoria kihasználtsága, ha elfogy a mem áttér a swap-ra majd szépen elszáll a load és a szerver is....
total used free shared buffers cached
Mem: 8300200 7903268 396932 0 21928 1507628
-/+ buffers/cache: 6373712 1926488
Swap: 7815544 449196 7366348

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22938 www-data 20 0 916m 311m 2268 S 0 3.8 0:07.50 apache2
25206 www-data 20 0 694m 281m 2272 S 0 3.5 0:05.75 apache2
22658 www-data 20 0 792m 275m 2304 S 0 3.4 0:05.74 apache2
19603 www-data 20 0 880m 274m 2272 S 0 3.4 0:05.47 apache2
29893 www-data 20 0 783m 274m 2296 S 3 3.4 0:06.85 apache2
17800 www-data 20 0 741m 266m 2264 S 0 3.3 0:04.56 apache2
15619 www-data 20 0 750m 253m 2268 S 0 3.1 0:07.56 apache2
19054 www-data 20 0 704m 251m 2304 S 0 3.1 0:05.87 apache2
9960 www-data 20 0 853m 245m 2296 S 0 3.0 0:05.69 apache2
7910 www-data 20 0 700m 243m 2264 S 0 3.0 0:05.09 apache2
18216 www-data 20 0 582m 229m 2268 S 0 2.8 0:04.53 apache2
27546 www-data 20 0 614m 224m 2772 S 0 2.8 0:05.75 apache2
20238 www-data 20 0 757m 224m 2268 S 0 2.8 0:05.21 apache2
21655 www-data 20 0 746m 223m 2268 S 0 2.8 0:05.08 apache2
25368 www-data 20 0 777m 222m 2308 S 0 2.7 0:05.08 apache2
13971 www-data 20 0 655m 221m 2268 S 0 2.7 0:06.50 apache2
22588 www-data 20 0 575m 220m 2264 S 0 2.7 0:05.60 apache2
2590 www-data 20 0 630m 216m 3004 S 0 2.7 0:04.87 apache2
......

Van valakinek ötlete miért eszik hírtelen ennyi memoriát?
A szerveren sok weblap van, elképzelhető, hogy valaki írt egy rossz kódot....
Hogy tudnám megnézni ki tömi ki a apache processeket, próbálkoztam strace-al, pmap-al , logok böngészésével de semmi kézzelfogható..
Megnéztem a legfirssebb bug reportokat , nem jött e ki mostanában egy bugreport ami magyarázatot adna erre de nem találtam.

Előre is köszi minden hozzászólást.

UI: Van több másik szerver is hasonló beállításokkal, és probléma nélkül szépen mennek.

üdv

Hozzászólások

egy netstat -tn lehet, jól jönne ahhoz, hogy lássuk, van-e sok hálózati kapcsolatod egyszerre.
meg iptraffal/tcpdumppal megnézhetnéd, csinál-e valamit az a sok processz vagy csak megkergült.

Szia,

Kapcsolatokban nem szenvedek hiányt az van bőven.
netstat -tn | grep ESTABLISHED | wc -l
370

netstat -tn | grep TIME_WAIT | wc -l
4395

Iptraffal figyelve is folyamatosan volt mozgás.
Bár mikor stracel megnéztem ezeket a folyamatokat volt ami csak állt nem csinált semmit, de volt amelyik pörgött rendesen.

Most megint elhalt szerencsétlen... ki kellett killelnem az összes apache folyamatot , mert 170-nél járt a load, és a memoria tele volt a swap félig...

Köszi a helpet, most kicsit tehetetlennek érzem magam mert nem tudom mi a hiba....

Mennyire van állítva a KeepAliveTimeout? Ha magas, vedd kisebbre.
Kapcsold ki a KeepAlive-ot próbából.

Korulneztel serverfault.com -on? Talaltam par jo "topicot" errol.

Folyamatosan azon agyalok mi változott meg egy hete, hogy az eddig jó config már nem jó. De nem történt semmi változtatás nem volt update nem volt config modosítás semmi... egyik nap csak lehalt, ezért gondolom ,hogy esetleg egy rosszul megírt oldal kódja szivat, de nem tudom ,hogy ez lehetésges e egyáltalán. Figyelem a php folyamatokat is de egyiket sem tudtam összeföggésbe hozni ezzel.

Keresgéltem neten új támadásokat apache2 ellen arra gondolva, hogy valaki szórakozik a szerverrel de ez se vezetett megoldásra.

Igen, gondoltam erre is néztem a kapcsolodások számát, plusz ha egy ip-ről x-nél több kapcsolat jön az automatikusan tíltja egy script iptablesben. Néztem tűzfal logokat, de nem találtam errre utalo nyomot, a statisztikák alapján nem emelkedett a kapcsolatok száma a szerver felé jelentősen.

esetleg egy joliranyzott RLimitMem nem segit ?

Nézd meg az access logot nem álltak-e neki bazinagy filet leszedni php-n keresztül. Sok őrült hoz össze olyan PHP kódot, hogy az EGÉSZ file-t benyalja a memóriába a php-val és majd akkor kitolja... Ezzel remekül lehet tetszőleges konfigot fektetni. :)

No, meglestem amit írtál.
Minden vhost külön helyre loggol, így írtam rá egy kicsi scriptet ami minden logbol kigyűjti a top10-et majd sorba is rendezi őket.
Tehát megkaptam melyek a legnagyobb lekérdezések.
A legtöbb valamilyen swf..
Lehet buta kérdés de most hogy megvannak az infok , ezekből hogyan tudom eldönteni ki az aki tölti a memoriát?

üdv

Azt nem nézted, nem indítgatnak-e az apache processzek más programokat?
(pstree, ps axf)

Esetleg megpróbálhatnád letiltani az összes vhost-ot, aztán egyenként vagy kisebb csoportokban engedélyezni reload-dal.

Esetleg használsz valami mod_php-s megoldást? Ha kevés, eléggé látogatott vhostod van, megpróbálhatnál átállni FastCGI-re, akár suexec nélkül is.

Lényegébe igen, minden egyes php folyamat az adott felhasználó nevében fut így elkülönítve őket egymástól és a rendszertől.
És suphp-val lehetőség van több különböző php verzió egyidejű használatára is. (nem tudom mással is meg lehet e oldani.)

Az apache folyamatok azok már nem a userek nevében futnak. Csak a php-k.

Nem tudom segít -e.
Nekem itthon egy hónap óta vannak hasonló problémáim, csak fejlesztés nem éles szerver.
Kernelt is frissítettem a probléma miatt most 2.6.27-15.
Ubuntu 8.10.
MySQL: 5.0.67
PHP: 5.2.6-2ubuntu4.3
Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.3 with Suhosin-Patch

Én nem hiszem, hogy rossz kód van a dologban, mert a saját kódok amiket használok régiek csak annyit változtattam rajtuk mostanság, hogy Drupal alatt is fusson.

Ha elkezdek dolgozni (napi 2-3 óra), akkor max egy hét alatt a swap is 90%-on van.

Eddig nem foglalkoztam vele, restart után megint használható. Most 8d 2h 34m az uptime és minden rendben van, mert már másfél hete nem fejlesztgettem.

Lehet, hogy hulyeseget kerdezek, de mpm worker esetleg?
--
TH

Esetleg még ötlet valakinek, hogyan lehetne ennek a végére járni.
köszi.