Apache und RAM

Apache, Lighttpd, nginx, Cherokee
thelaw
Posts: 53
Joined: 2002-07-30 18:53
Location: Salzgitter

Apache und RAM

Post by thelaw » 2009-05-21 15:26

Hallo,

ich habe das Problem, dass ein Apache-Prozess gelegentlich recht viel RAM zieht. Lt. TOP 1515900 RSS. D.h. nach meinem Verständnis, dass er 1,5 GB RAM belegt. Bei nur 2 GB für das ganze System und etlichen anderen Diensten ist mir das doch ein wenig zu gierig.

Ich vermute nun mal, dass dies durch eine Webanwendung die auf dem Server läuft verursacht wird. D.h. ein Skript o.ä. läuft da wohl amok. Nur wie kann ich rausfinden welches? Der Apache loggt im access_log erst, wenn die Anfrage beendet ist. Und das passiert hier nie - der Server hängt sich nach einiger Zeit komplett auf - vermutlich weil er endlos zu Swappen anfängt und die Resourcen dann zu knapp werden und die Load dann ins unermessliche steigt.

Gibt es eine Möglichkeit den maximalen Speicher pro Apache-Prozess zu begrenzen? Er kann von mir aus auch einfach gekillt werden - geht mir nur darum, dass der ganze Server nicht immer mitgezogen wird.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Apache und RAM

Post by daemotron » 2009-05-21 15:33

Wenn Du von Skript sprichst, gehe ich mal davon aus, dass Du mod_php, mod_perl oder mod_python einsetzt. Andere Einbindungsmöglichkeiten wie CGI, FastCGI oder WSGI würden den Apache-Prozess ja nicht derartig anschwellen lassen. Wenn das bei Dir der Fall ist, hast Du im Grunde zwei Möglichkeiten: Entweder, Du limitierst mithilfe der modulspezifischen Konfigurationsmöglichkeiten den Speicherkonsum eines Skripts, oder Du lässt vorübergehend Skripte nur als CGI laufen. Bei der ersten Möglichkeit sollte Dir das Log bei entsprechender Verbosity Aufschluss darüber geben, welche Skripte aufgrund Speicherüberzug abgebrochen wurden, bei der zweiten Möglichkeit müsstest Du die Prozesse selbst im Auge behalten.

Es kann aber auch sein, dass es gar nicht von einem Skript herrührt, sondern dass Du Opfer eines Memory Leaks in einem der Apache Module geworden bist. Setzt Du denn irgendwelche exotischen oder gar proprietären Module ein? Wenn ja, würde ich die testhalber mal weglassen.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

thelaw
Posts: 53
Joined: 2002-07-30 18:53
Location: Salzgitter

Re: Apache und RAM

Post by thelaw » 2009-05-24 21:56

Hi.

Danke für die Antwort.
Ich habe CGI und mod_perl am laufen. Verdacht liegt bei mir auch bei mod_perl, werde mir da wohl mal die Konfigurationsmöglichkeiten ansehen.

In wiefern ist eine Grenze für CGI definiert? Und wo liegt die und wie kann die ggf. angepasst werden?

Mario

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Apache und RAM

Post by daemotron » 2009-05-25 10:04

CGI-Prozesse sind eigenständige Prozesse (Child-Prozesse des Webservers, da von diesem geforked). Für sie gelten die ganz "normalen" Beschränkungen (wie für jeden anderen Prozess auch) des Systems. Ich bin bei Linux etwas aus der Übung, aber AFAIR kann man da entweder über sysctl oder über limits.conf Begrenzungen setzen (bei FreeBSD macht man sowas über Login Classes :wink:).

Wenn es allerdings (wie oben beschrieben) die Apache-Prozesse sind, die einen exorbitanten RSS-Wert belegen, dann dürfte es eher mod_perl sein. Ich hab mal eben durch die Doku von mod_perl gescannt; leider scheint es keine Direktive zu geben, mit der sich Speicheranforderungen von mod_perl Threads limitieren lassen. Also kannst Du momentan nur den gesamten Apache-Prozess inkl. der zugehörigen von mod_perl erzeugten Threads limitieren.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Apache und RAM

Post by Roger Wilco » 2009-05-25 19:42

jfreund wrote:Ich bin bei Linux etwas aus der Übung, aber AFAIR kann man da entweder über sysctl oder über limits.conf Begrenzungen setzen

Letzteres. Oder eben direkt in der Konfiguration des Apache httpd:

http://httpd.apache.org/docs/2.2/mod/co ... #rlimitcpu
http://httpd.apache.org/docs/2.2/mod/co ... #rlimitmem
http://httpd.apache.org/docs/2.2/mod/co ... limitnproc