Zu viele Schlafende Apache Prozesse

Apache, Lighttpd, nginx, Cherokee
stickybit
Posts: 59
Joined: 2007-08-16 09:39

Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 09:58

Hallo,

habe einen Root-Server, bei dem ab und zu zu viele schlafende Apache-Prozesse entstehen. Einige laufen seit mehreren Minuten, also beenden sich nicht. Eine Analyse hat ergeben, dass es sich dabei um einen einzigen VirtualHost handelt, also wird von einer Website verursacht.
Das Problem ist, dass der Server dabei lahmgelegt wird, was zur vollständigen Unerreichbarkeit von anderen Websites führt.

Hat jemand eine Idee, wie man dagegen vorgehen kann?

Besten Dank im Voraus!

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 10:20

danke für die schnelle Antwort.

Zitat: "...Ein unbeschäftiger Prozess ist einer, der keine Anfrage bedient. Wenn mehr als MaxSpareServers Prozesse unbeschäftigt sind, wird der Elternprozess die überschüssigen Prozesse beenden."
"Voreinstellung: MaxSpareServers 10"

In der oben beschriebenen Situation habe ich über 100 Kind-Prozesse am laufen!
Da MaxSpareServers auf 10 eingestellt ist, folgere ich daraus, dass die jeder Prozess eine Anfrage bedient und aus diesem Grund sich nicht beendet. Oder mache ich da einen gedanklichen Fehler?

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 10:50

> Ja, Du machst einen gedanklichen Fehler.
Wo denn?

> Zuerst mal, musst Du natürlich die max. anzahl der Prozesse limitieren.
> ServerLimit
Keine ServerLimit-Anweisung, also wird der Default-Wert verwendet.

> Dann ggf. noch das keepalive Timout herunter setzen.
> Denn ein Prozess wird erst danach gekillt.
Auch keine KeepAlive, also wieder der Default-Wert, also off

Die Datei server-tuning.conf habe ich nicht, wirklich nicht.
Ich verwende eine selbstkompilierte Version von Apache auf einem Debian System.

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

Re: Zu viele Schlafende Apache Prozesse

Post by Roger Wilco » 2007-08-16 10:52

stickybit wrote:Ich verwende eine selbstkompilierte Version von Apache auf einem Debian System.

Und welches MPM?

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 11:12

Prefork.

Code: Select all

# apache2 -V
Server version: Apache/2.2.3
Server built:   Aug  6 2006 11:09:20
Server's Module Magic Number: 20051115:3
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT=""
 -D SUEXEC_BIN="/bin/suexec"
 -D DEFAULT_PIDLOG="/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/httpd.conf"

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 11:36

danke, mal sehen was es bringt.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 11:52

mich wundern nur, dass so viele Prozesse mehrere Minuten lang nicht zu gehen.
Ich mir fast sicher, dass ich noch weitergraben muss.

Hier eine Zeile als Beispiel. Der Aufruf ps aux um 11:22 Uhr

Code: Select all

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
user1      406  0.1  1.2 91696 12512 ?       S    11:18   0:00 /usr/sbin/apache2 -k start


Hier kann man klar sehen, MEM = 1,2%. Und wenn von diesen Prozessen über 100 da sind und nicht zugehen, dann steht das gesamte System wegen dem Speichermangel ganz schön still!

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 12:14

System

Code: Select all

Linux version 2.6.16
AMD Athlon(tm) 64 Processor 3200+ (1800 MHz)
1GB RAM


Apache

Code: Select all

Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7e PHP/5.1.4


Apache und PHP wurden mit vielen Modulen kompiliert, deshalb ist der Speicherverbrauch eines Apache-Prozesses relativ hoch.

Ich glaube, das Thema ist hier falsch und wäre unter / Webserver Installtion / Konfiguration besser aufgehoben.

Ja, denke ich auch. Bin uhrsprünglich davon ausgegangen, dass es sich nicht um Apache handelt...
Das Thema verschieben, geht das?
[/quote]

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

Re: Zu viele Schlafende Apache Prozesse

Post by Joe User » 2007-08-16 12:20

Moved from Allgemeine *NIX-Serverfragen mit Tiefgang to Webserver - Installation und Konfiguration.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 13:17

Nicht dass Du an in den MaxClients Limit rennst.

So wie es aussieht, ist das nicht der Punkt.
Wenn MaxClients erreicht wird, werden weitere Client-Anfragen weiter angenommen und landen in eine Warteschlange. Sie werden erst dann ausgeführt, wenn ein Prozess wieder frei wird.

Das ist ja eben das Problem! Ich stelle mir die Situation so vor.
1. MaxClients wird erreicht. Die meisten Apache "Problem-Prozesse" bedienen dabei nur eine einzige Website, über 100 Stück!
2. Diese Prozesse gehen nicht zu.
3. Der Server fängt massiv an auf Festplatte zu verlagern.
4. Und schon haben wir die Situation da, dass nichts mehr geht!

Das Problem tritt sporadisch auf. Ich vermute, die Jungs haben da ein Online-Spiel installiert. Wenn die beginnen zu spielen, dann wird der Server überlastet.
Mich wundert, nur warum die Apache-Prozesse so lange offen bleiben, ohne dass das Timeout eintritt, nach 30 Sek. etwa.

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

Re: Zu viele Schlafende Apache Prozesse

Post by Joe User » 2007-08-16 13:36

Code: Select all

Timeout 300
KeepAlive On
KeepAliveTimeout 3
MaxKeepAliveRequests 100
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild 500
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild 500
</IfModule>

Wenn das nicht hilft: KeepAlive Off

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 14:04

Nach dem letzten Zusammenbruch, vor 4 Tagen, habe ich volgende Einstellungen eingetragen. Davor waren sie nicht da, waren also die Default-Werte gültig.

Code: Select all

KeepAlive                                         off
StartServers                                      5
MinSpareServers                                   5
MaxSpareServers                                   10
ServerLimit                                       150
MaxClients                                        150
MaxRequestsPerChild                               1


Seitdem keine Probleme. Ich werd' mal den Wert MaxRequestsPerChild vorsichtig anheben, um bessere Perfomace zu erreichen, und gucken, was passiert.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 14:24

ich danke euch, eure Hilfe hat mich auf jeden Fall weitergebracht. :-D
Ich werde noch mehrere Tage warten. Falls keine Probleme mehr auftreten, werde ich mit den o.g. Parametern noch weiter spielen.

rootsvr
Posts: 538
Joined: 2005-09-02 11:12

Re: Zu viele Schlafende Apache Prozesse

Post by rootsvr » 2007-08-16 14:29

stickybit wrote:Nach dem letzten Zusammenbruch, vor 4 Tagen, habe ich volgende Einstellungen eingetragen. Davor waren sie nicht da, waren also die Default-Werte gültig.

Code: Select all

KeepAlive                                         off
StartServers                                      5
MinSpareServers                                   5
MaxSpareServers                                   10
ServerLimit                                       150
MaxClients                                        150
MaxRequestsPerChild                               1



Max Requests per Child auf 1 zu setzen heißt das Du nach jeder Anfrage (sei es eine Webseite oder nur ein 0px gif den Child beendest.. performant ist das imho nicht ...

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: Zu viele Schlafende Apache Prozesse

Post by stickybit » 2007-08-16 14:33

performant ist das imho nicht ...

ja, das ist mir mehr als bewusst. Dies ist eine temporäre Maßnahme, um überhaupt zu testen, woran es liegt.