Apache2 braucht ca. 12 Minuten zum starten

Apache, Lighttpd, nginx, Cherokee
dock
Posts: 4
Joined: 2007-02-02 16:29

Apache2 braucht ca. 12 Minuten zum starten

Post by dock » 2007-02-02 16:56

Ich habe einen Debian GNU/Linux Stable Server mit 2.6.8er Kernel und Apache2 (Debian Stable Paket).
1GB RAM, Athlon XP 3000+ CPU -> Systemlast völlig in Ordnung.

Der Apache2 braucht 12 Minuten bis hin zu Ewigkeiten zum starten. Entferne ich alle Module bis auf SuExec und PHP4 (werden von den vHosts gebraucht) und lasse den Server im Debug Modus starten, dann hängt er direkt nach dem Laden der Module.
Entferne ich alle vHosts startet der Server normal.
Füge ich aber auch nur 1 vHost ein, dauert es schon wieder 30-40 Sekunden. Der Server hat aber insgesamt 400 vHosts ungefähr.
Ein DNS Problem möchte ich aussschließen, alle 3 NS in der resolv.conf antworten prompt.

Der Apache ist ein MPM Prefork mit den Settings

StartServers 15
MinSpareServers 15
MaxSpareServers 30
MaxClients 60
MaxRequestsPerChild 180

Wo kann ich noch suchen? Sobald der Server läuft sieht das Debug Log ok aus.

Nur soetwas:

[Fri Feb 02 16:56:20 2007] [info] (104)Connection reset by peer: core_output_filter: writing data to the network

Aber das ist ja kein Fehler.

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

Re: Apache2 braucht ca. 12 Minuten zum starten

Post by oxygen » 2007-02-02 18:07

MaxRequestsPerChild 180 <- Das ist sehr schlecht. Wenn man dort etwas einträgt, dann in der Größenordnung 10000.

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: Apache2 braucht ca. 12 Minuten zum starten

Post by dotme » 2007-02-02 18:16

Falls Du Hostnamen als Parameter eines VirtualHost-Containers (<VirtualHost fully.qualified.domain.name:80>) verwendest, könnte das vielleicht trotz Deiner Aussage bzgl. DNS ein Grund sein.

Ansonsten kannst Du mit "strace -p <PID des Hauptservers>" vielleicht sehen, womit sich Apache in den 12 Minuten beschäftigt.

wassup
Posts: 35
Joined: 2005-03-04 10:55

Re: Apache2 braucht ca. 12 Minuten zum starten

Post by wassup » 2007-02-03 14:12

wie sieht denn ein Standard-Vhost bei dir aus?
Falls möglich benutze doch die Massen-Vhost Option vom Apache -> http://httpd.apache.org/docs/2.0/vhosts/mass.html

Ansonsten: http://httpd.apache.org/docs/2.0/misc/perf-tuning.html

dock
Posts: 4
Joined: 2007-02-02 16:29

Re: Apache2 braucht ca. 12 Minuten zum starten

Post by dock » 2007-02-04 12:28

Hi,

vielen Dank für eure Antworten. Hier nun die gewünschten Informationen.


Ich habe das strace Log als Textdatei anbeigefügt, hier die letzten Zeilen:

Code: Select all

rt_sigaction(SIGINT, {0x8075fa0, [], 0}, {SIG_DFL}, 8) = 0
waitpid(-1, 0xbffff678, 0)              = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
waitpid(-1,
Hier bleibt der Server dann rund 15 Minuten stehen, bis folgendes kommt:

Code: Select all

[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 23369
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, 0xbffff2e4, WNOHANG)        = -1 ECHILD (No child processes)
sigreturn()                             = ? (mask now [])
rt_sigaction(SIGINT, {SIG_DFL}, {0x8075fa0, [], 0}, 8) = 0
write(1, ".n", 2.
)                      = 2
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(255, "", 3583)                     = 0
exit_group(0) 
Während des Wartens sehe ich folgende Prozesse:

Code: Select all

~# ps ajx | grep apache2
23260 23367 23367 23260 pts/0    23367 S+       0   0:00 strace /etc/init.d/apache2 start
23367 23368 23367 23260 pts/0    23367 S+       0   0:00 /bin/sh -e /etc/init.d/apache2 start
23368 23369 23367 23260 pts/0    23367 S+       0   0:00 /bin/sh /usr/sbin/apache2ctl startssl
23369 23371 23367 23260 pts/0    23367 S+       0   0:00 /usr/sbin/apache2 -k start -DSSL
Jetzt nach dem Start sehe ich nur:

Code: Select all

~# ps ajx | grep apache2
1 23512 23512 23512 ?           -1 Ss       0   0:00 /usr/sbin/apache2 -k start -DSSL
Und der Apache entwortet erstmal auf keine Anfragen - belegt aber trotzdem Port 80.


Dann... 2-3 Minuten später ohne Interaktion liefert er auch Seiten aus und ich bekomme folgende Prozesse gelistet:

Code: Select all

~# ps ajx | grep apache
    1 23512 23512 23512 ?           -1 Ss       0   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23720 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23721 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23722 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23723 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23724 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23725 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23732 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23733 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23735 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23736 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23737 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23740 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23741 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23742 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23743 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23744 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23746 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23747 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23748 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23749 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23750 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23751 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23752 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23753 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23754 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23755 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23756 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23757 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23758 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL
23512 23759 23512 23512 ?           -1 S       33   0:00 /usr/sbin/apache2 -k start -DSSL



Es liegt auch nicht an mod_ssl und fehlender Entropie - ich habe mod_ssl auf diesem Server deaktiviert.


Das error.log schreibt leider gar nichts - trotz LogLevel debug.
Selbst wenn ich apache2 direkt mit den Optionen -X -e debug aufrufe, sehe ich nur den trace der Module und dann wartet der Server wieder.
Ist also identisch zum strace Log.
Soweit ich weiss werden doch nach dem Laden der Module die vHosts eingelesen - leider bekomme ich da nur keine genauen Debug Informationen.
Wünschenswert wäre ja etwas wie (Reading Configuration for vHost x, resolving domainname etc.) - aber das gibt es soweit ich weiss nicht.


Ein Standard vHost sieht so aus:

Code: Select all

<VirtualHost example.org>

    SuexecUserGroup vu2010 vu2010
    
    ServerAdmin     root@example.org
    DocumentRoot    /var/www/virtual/example_org/htdocs

    ServerName      example.org
    ServerAlias     *.example.org example.org

    CustomLog       /var/log/apache2/example.org-traf.log traff 
    CustomLog       /var/www/virtual/example.org/logs/example.org-combined.log combined

    ScriptAlias /cgi-bin/ /var/www/virtual/example.org/cgi-bin/
    <Directory /var/www/virtual/example.org/cgi-bin>
        AllowOverride AuthConfig
        Options ExecCGI
        Order allow,deny
        Allow from all
    </Directory>

    php_admin_value open_basedir "/var/www/virtual/example.org/:/usr/share/php/:/tmp/"

    <Directory /var/www/virtual/example.org/htdocs>
        Options -Indexes Includes FollowSymLinks MultiViews
        AllowOverride AuthConfig FileInfo Indexes Options Limit
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: Apache2 braucht ca. 12 Minuten zum starten

Post by dotme » 2007-02-04 15:03

Naja, ich dachte eher daran den Start des Apaches direkt zu tracen als da Init-Skript. Denn so sieht man auch nicht mehr als Du bereits beschrieben hast.
waitpid(-1,

Hier bleibt der Server dann rund 15 Minuten stehen, bis folgendes kommt:

[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 23369
Das Init-Skript wartet das der Aufruf von apache2ctl (PID 23369 - s.Ausgabe von `ps ajx`) zurückkehrt.

Vielleicht liefert Dir `strace -f /usr/sbin/apache2 -k start -DSSL` interessanteres oder aber Du startest Apache ohne strace und verbindest Dich in der Wartezeit mittles `strace -p <pid>` auf den Apache.

Ansonsten kannst Du hier ein paar Sachen zur Verwendung von FQDNs in <VirtualHost>-Anweisungen lesen: http://httpd.apache.org/docs/2.2/dns-caveats.html#tips

Und ne Menge Entropy liefert ein `find / >/dev/null`.

dock
Posts: 4
Joined: 2007-02-02 16:29

Re: Apache2 braucht ca. 12 Minuten zum starten

Post by dock » 2007-02-04 15:37

dotme wrote: Ansonsten kannst Du hier ein paar Sachen zur Verwendung von FQDNs in <VirtualHost>-Anweisungen lesen: http://httpd.apache.org/docs/2.2/dns-caveats.html#tips
Was trinkst Du - ich schick Dir 'ne Kiste davon!
Ich habe die IP statt des FQDN eingetragen.
Daran lag es :-)



Ich habe alle vHost neuschreiben lassen und schon klappt es wieder in 3-4 Sekunden mit dem Start.

Viele Grüße
Yves