Apache2-Webserver zu langsam

Hallo,

ich habe hier einen Apache2-HTTP-Server auf einem Gentoo-System laufen. Der Webserver läuft eigentlich auch korrekt, allerdings werden manche Seiten unglaublich langsam angezeigt. Wenn ich z.B. ein recht großes Verzeichnis ganz normal mit autoindex anzeigen lasse (z.B. http://ubuntu.kahl-com.de/ubuntu/pool/main/l/) dauert es über eine Minute.

Der Debian-Server vorher hat damit komischerweise nicht die geringsten Probleme gehabt.
Irgendwie kommt mir der ganze Webserver manchmal etwas langsamer vor, als der Vorgänger in Debian Sarge. Die meisten Sachen (auch größere PHP-Anwendungen wie phpMyAdmin) werden allerdings ohne Probleme in normaler Zeit geladen.

Gibt es irgendeine Möglichkeit, wie ich herausfinden kann, was der Server in der fehlenden Zeit tut (top zeigt mir viele Forks von Apache2 mit hoher Auslastung an)? In den Logfiles steht auch nichts auffälliges.

Die Konfiguration:
Code:
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

Server loaded: APR 0.9.12, APR-UTIL 0.9.12
Compiled using: APR 0.9.12, APR-UTIL 0.9.12
Architecture: 32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-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 HTTPD_ROOT="/usr"
-D SUEXEC_BIN="/usr/sbin/suexec2"
-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"

USE-Flags:
Installed versions: 2.0.59-r2 (2) (14:40:34 05/27/07) (apache2 -debug doc -ldap -mpm-itk -mpm-leader -mpm-peruser mpm-prefork -mpm-threadpool -mpm-worker -selinux ssl -static-modules threads)

/etc/apache2/httpd.conf

Der ganze Server ist aus den Quellen (über Portage) ohne irgendwelche besonderen CFLAGS gebaut. Es läuft ein aktueller Gentoo-Kernel.

Ich würde mich sehr über ein paar Anregungen freuen. Die Sache ist zwar nicht akut, aber trotzdem irgendwie nervig.

mfg, metax.
 
Besorg dir mal apachetop. Damit kannst du den Webserver monitoren und sehen wofür der so lange braucht.
 
Apachetop hilft mir leider nicht weiter, weil es nur die Logfiles liest und auswertet.
D.h., wenn ich ein paar schnelle Klicks auf dem vhost ausführe, dessen Logs ich geladen habe, dann sehe ich zwar diese Requests, aber es zeigt mir leider nicht an, was während den Requests passiert.

Gibt es irgendeine Möglichkeit, wie ich sehen kann, auf welche Dateien ein Prozess im Moment zugreift?
 
Original von metax.
Gibt es irgendeine Möglichkeit, wie ich sehen kann, auf welche Dateien ein Prozess im Moment zugreift?

Ja, mit 'lsof' (list open files).

Edit: Wenn ich die von dir im ersten Beitrag verlinkte URL über einen Proxy aufrufe, dauert es auch ewig, bis ich einen 404-Fehler (not found) bekomme. Vermutlich wird da sogar das Timeout des Proxy überschritten. Ohne Proxy kommt allerdings der Inhalt, braucht aber tatsächlich ewig. Hast du mal versucht für den Ubuntu-Ordner eine extra Directory-Direktive einzutragen, in der du das Directory-Listing explizit setzt?
 
lsof hat leider auch keine neuen Erkenntnisse gebracht. Apache2 hat während des Requests nur das Verzeichnis und die TCP-Verbindung zum Client als zusätzliche Dateizeiger offen.

[...], in der du das Directory-Listing explizit setzt
Wie genau meinst du das?

Im Moment generiert mir mod_autoindex das Listing für die Verzeichnisse im Ubuntu-vhost. Natürlich könnte ich Verzeichnis-Requests auch auf ein PHP- oder Perlscript umleiten lassen, welches mir die Ausgabe generiert (statische Indexdateien kommen nicht in Frage, da die Daten täglich per rsync von einem Ubuntu-Mirror syncronisiert werden), aber das Problem deutet ja eher auf ein grundsätzliches Problem oder einen "Flaschenhals" im Apache2-Daemon hin, und dies möchte ich gerne beseitigen.
 
Code:
<VirtualHost *:80>
        ServerAdmin webmaster@kahl-com.de

        Servername ubuntu.kahl-com.de
        Serveralias repository.kahl-com.de

        DocumentRoot /srv/repository/

        #IndexOptions NameWidth=*

        <Directory />
                Options Indexes -FollowSymLinks -Multiviews
                AllowOverride None
        </Directory>

        <Files ~ ^mirror.*\.bash>
        Order allow,deny
        deny from all
        </Files>


        <Files ~ ^update.*\.sh$>
        Order allow,deny
        deny from all
        </Files>


        <Files ~ ^darkstat\.db$>
        Order allow,deny
        deny from all
        </Files>


        ErrorLog /var/log/apache2/kahl-com.de/ubuntu-error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug

        CustomLog /var/log/apache2/kahl-com.de/ubuntu.log combined
        ServerSignature On

</VirtualHost>
 
Original von metax.
LogLevel debug
Brauchst du auf einem Produktionssystem wirklich so viel Information in deinen Logs? "warn" sollte als LogLevel für die meisten Fälle ausreichen. Durch eine Anpassung an dieser Stelle kannst du zumindest eine kleine Optimierung an der Performanz vornehmen. Allzuviel wird das aber nicht reißen.

Du vergleichst hier mit einem Debian-Server... lief der auf dem gleichen Dateisystem?
 
Ich habe den Loglevel erst seit heute für diesen vhost auf debug, da ich gehofft hatte, dass dadurch das Problem evtl. in den Logs auftaucht. Hat leider nichts gebracht.

Du vergleichst hier mit einem Debian-Server... lief der auf dem gleichen Dateisystem?
Ja, ich kann das alte Betriebssystem sogar noch über chroot erreichen und dort einen Vergleichsserver starten. Bei der Apache-Version in der chroot-Umgebung tritt das Problem wie gesagt nicht auf.
 
Zurück
Oben