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.
Apache2 braucht ca. 12 Minuten zum starten
-
- Posts: 2138
- Joined: 2002-12-15 00:10
- Location: Bergheim
Re: Apache2 braucht ca. 12 Minuten zum starten
MaxRequestsPerChild 180 <- Das ist sehr schlecht. Wenn man dort etwas einträgt, dann in der Größenordnung 10000.
-
- Posts: 150
- Joined: 2004-12-15 16:48
Re: Apache2 braucht ca. 12 Minuten zum starten
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.
Ansonsten kannst Du mit "strace -p <PID des Hauptservers>" vielleicht sehen, womit sich Apache in den 12 Minuten beschäftigt.
-
- Posts: 35
- Joined: 2005-03-04 10:55
Re: Apache2 braucht ca. 12 Minuten zum starten
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
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
-
- Posts: 4
- Joined: 2007-02-02 16:29
Re: Apache2 braucht ca. 12 Minuten zum starten
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:
Hier bleibt der Server dann rund 15 Minuten stehen, bis folgendes kommt:
Während des Wartens sehe ich folgende Prozesse:
Jetzt nach dem Start sehe ich nur:
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:
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:
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,
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)
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
Code: Select all
~# ps ajx | grep apache2
1 23512 23512 23512 ? -1 Ss 0 0:00 /usr/sbin/apache2 -k start -DSSL
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>
-
- Posts: 150
- Joined: 2004-12-15 16:48
Re: Apache2 braucht ca. 12 Minuten zum starten
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.
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`.
Das Init-Skript wartet das der Aufruf von apache2ctl (PID 23369 - s.Ausgabe von `ps ajx`) zurückkehrt.waitpid(-1,
Hier bleibt der Server dann rund 15 Minuten stehen, bis folgendes kommt:
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 23369
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`.
-
- Posts: 4
- Joined: 2007-02-02 16:29
Re: Apache2 braucht ca. 12 Minuten zum starten
Was trinkst Du - ich schick Dir 'ne Kiste davon!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
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