Lang laufende Apache-Threads identifizieren?

Apache, Lighttpd, nginx, Cherokee
igel
Posts: 13
Joined: 2005-05-15 21:21

Lang laufende Apache-Threads identifizieren?

Post by igel » 2009-08-02 20:01

Moin!

Seit einiger Zeit habe ich mit meinem Server Probleme. Das Hauptproblem ist, dass der Server recht schwachbrünstig ist, insbesondere hat er mit 512 MB RAM wenig Arbeitsspeicher. Damit muss ich offenbar noch einige Monate leben. Immerhin ist es ein echter Rootserver, nichts virtuelles.

Das Problem ist definitiv der Apache, denn eigentlich hat der Server eine sehr geringe Last. Aber ab und zu fährt er sich einfach fest und hat dann eine Serverlast von 40, hervorgerufen daher, dass er durch viele Apache Prozesse sehr viel Swapen muss. Daher habe ich in den letzten Tagen die Anzahl der maximalen Prozesse schrittweise bis auf 15 reduziert (Ubuntu-Default: 150). Dadurch lief der Server zwar durchgehend mit niedriger Last, aber die Apachen fraßen sich trotzdem nach ein paar Tagen fest. Offenbar waren die paar Prozesse mit irgendwelchen langen Aufgaben belegt. Wenn ich den Apachen beendet hatte und neu gestartet habe, lief er wieder wie geschmiert. Ich denke daher, dass ich nicht umhin komme, herauszufinden, was die da genau tun.

Nur wie krieg' ich raus, was er da so lange tut?

Kann ich ihn irgendwie zwingen, etwa nach 10 Minuten einfach jeden Task abzubrechen?

Gruß, iGEL

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Lang laufende Apache-Threads identifizieren?

Post by oxygen » 2009-08-02 20:53

Das behebt zwar nicht das Problem, aber du kannst ja einen (niedrigen) Wert für MaxRequestsPerChild einstellen.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Lang laufende Apache-Threads identifizieren?

Post by Joe User » 2009-08-02 21:23

Klingt nach einem kaputten Script, oder gar Interpreter, Stichwort Memory-Leak...
Unabhängig davon solltest Du in Betracht ziehen, auf einen leichteren HTTPd beispielsweise Lighttpd umzusteigen.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

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

Re: Lang laufende Apache-Threads identifizieren?

Post by daemotron » 2009-08-03 13:24

iGEL wrote:Nur wie krieg' ich raus, was er da so lange tut?

ApacheTop und mod_status (insb. mit SeeRequestTail On) sollten Dir einen guten Eindruck verschaffen können, womit Dein Indianer gerade beschäftigt ist.

iGEL wrote:Kann ich ihn irgendwie zwingen, etwa nach 10 Minuten einfach jeden Task abzubrechen?

Nein, ein direktes Limit für die Prozesslaufzeit kannst Du nicht in der Apache-Konfiguration festlegen. Über die Apache-Konfiguration könntest Du Dir je nach eingesetztem MPM-Modul mit den einschlägigen Tuning-Optionen behelfen, um die Lebensdauer der Prozesse zu begrenzen - oder Du arbeitest eben systemseitig über Limits (wenn ich das richtig im Kopf habe wäre das unter Linux die Datei /etc/security/limits.conf).
“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

igel
Posts: 13
Joined: 2005-05-15 21:21

Re: Lang laufende Apache-Threads identifizieren?

Post by igel » 2009-08-03 17:05

Danke schön, mod_status sieht schon mal gut aus. Jetzt muss ich nur auf den nächsten Hänger warten. :)