Apache reagiert zu langsam auf Anfragen

Infomatrixx

New Member
Hallo zusammen,
ich bin jetzt seit langem am probieren, aber ich komme einfach nicht weiter.
Mein Apache vearbeitet anscheinend ankommende Anfragen einfach zu langsam.

Teilweise ist die Geschwindigkeit ok, teilweise dauert eine Anfrage locker eine halbe Minute und länger.

Beispiel: http://www.bos2web.de

Der Load bewegt sich zwischen 0,3 und 0,5

Das vorgeschriebene Prozedere ist unabhänig davon, ob es sich um HTML, oder PHP-Seiten handelt.

Gibt es bestimmte Schema, nach denen man der Ursache auf den Grund gehen kann ?

Gefühlsmäßig würde ich sagen, dass ab einer gewissen Anzahl von Besuchern (dauerhafter Abruf von Inhalten) die Verbindung sehr langsam wird.

Danke im Vorraus.

Gruß

Fabian
 
Last edited by a moderator:
Beispiel: BOS2Web - Weboberfläche für BOS-Datentelegramme - FMS32Pro, FMSCrusader und POC32

Der Load bewegt sich zwischen 0,3 und 0,5

Das vorgeschriebene Prozedere ist unabhänig davon, ob es sich um HTML, oder PHP-Seiten handelt.

HostnameLookups off

Poste dann mal deine mpm Einstellungen.

Gibt es bestimmte Schema, nach denen man der Ursache auf den Grund gehen kann ?

Gefühlsmäßig würde ich sagen, dass ab einer gewissen Anzahl von Besuchern (dauerhafter Abruf von Inhalten) die Verbindung sehr langsam wird.

mod_log laden; CustomLog um "%D" erweitern, damit loggst du die Dauer der Bearbeitung. Dann kann man mal analysieren.
 
Hi,
ich habe noch ein bisschen mit der server-tuning.conf gespielt und getestet und es scheint, als wenn hier in der Standardkonfiguration der Fehler gelegen hat :)

Sehe ich das richtig, das bei mehr als 10 Connections man eine Queue geschoben wird?

StartServers 1
MinSpareServers 2
MaxSpareServers 5
Serverlimit 75
MaxClients 150
MaxRequestsPerChild 0

Habe es nun so abgeändert:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
Serverlimit 150
MaxClients 150
MaxRequestsPerChild 0
KeepAlive on
KeepAliveTimeout 2
MaxKeepAliveRequests 10
HostNameLookups off

Bei dem System handelt es sich um einen vServer mit Intel XEON CPU, 1024MB Ram fest und zusätzlich 512 MB Ram dynamisch (HE VPS XXL)

Vielleicht könnt ihr noch ne Aussage zur neuen Konfiguration treffen.


Gruß

Fabian
 
Sehe ich das richtig, das bei mehr als 10 Connections man eine Queue geschoben wird?
Nein, bei den alten Einstellungen erst ab 75 gleichzeitigen Connections.

1024MB Ram fest und zusätzlich 512 MB Ram
Nach der Faustregel 12 MB pro Apache-Thread liegst Du mit MaxClients von 150 bei 1.8 GB Speicherverbrauch bei voller Auslastung.

huschi.
 
Dann war das auf Hochleistungs-Apache: Performance-Tuning - huschi.net etwas irreführend dargestellt :)
Nicht wirklich, denn über dem entsprechendem Beispiel steht ganz klar "Massenhoster". Lediglich der vorhandene Speicher den die Maschine hatte ist nicht erwähnt.
Aber ich hab den Artikel mal kurz um ein paar Sätze erweitert.

Wie berechnet man also den Speicherbedarf korrekt ?
Es gibt keine "korrekte Formel" dafür. Und nur weil ich Prozesse vorhin Threads genannt habe, ist die Faustregel nicht komplett falsch. Bezieht sich allerdings nur auf den Prefork-MPM den Du wahrscheinlich aber nutzt.

BTW: Möglichst viele MaxClients heißt nicht, daß er schneller arbeitet.
Meistens arbeitet eine Software mit möglichst wenig Speicherverbrauch auch am schnellsten. :)

huschi.
 
wie Huschi schon sagte, kann man bei PHP Seiten mit 12 - 15 MB pro Client rechnen. Du hast insgesammt ~ 1500 MB RAM zur Verfügung. Mailserver und MySQL Server benötigen auch noch RAM.

Für Apache würde ich mal ~ 50 MaxClients machen und die Buffers/Caches für MySQL (/etc/my.cnf) so klein machen, daß bei max_connections MySQL nicht mehr als ~ 250 MB verbraucht.

50 x 15 = 750 MB (Apache) + 250 MB (MySQL) = 1 GB RAM

Je mehr MaxClients (Apache) und max_connections (MySQL) du benötigst, desto kleiner müssen alle buffers/caches (my.cnf) sein. Dazu gehören auch myisam_sort_buffer_size und read_rnd_buffer_size ect.

Apache und MySQL Tuning

hier meine .cnf
Code:
[mysqld]

key_buffer = 512K
net_buffer_length = 1K

sort_buffer_size = 32K
myisam_sort_buffer_size = 32K
read_buffer_size = 16K
read_rnd_buffer_size = 512K
join_buffer_size = 512K

query_cache_size = 1M
thread_cache = 12
table_cache = 1024
max_allowed_packet = 256K

max_connections = 20
low_priority_updates = 1
long_query_time = 2
mein kleiner rootDS kann 20 Clients gleichzeitig bedienen ohne daß der RAM ausgeht ... hab doch nur 320 MB RAM :(
Code:
MaxRequestsPerChild [COLOR="Red"]8000[/COLOR]
MaxKeepAliveRequests [COLOR="Red"]100[/COLOR]
solltest du noch ändern!

Das mit den MaxKeepAliveRequests und MaxKeepAliveTimeout ist so eine Sache.... Da kommt es sehr auf die Webseite selbst drauf an. Hätte man 'nur' eine reine HTML Seite mit Text und Links ohne Bilder und .css, dann könnte man MaxKeepAliveRequests 1 machen.

Ich hab Apache so eingestellt, daß der Besucher erstmal die Seite komplett geladen bekommt. Also alle Grafiken, PHP, HTML. Klickt er innerhalb zwei Sekunden nicht auf einen Link, beendet Apache die Verbindung und der Child Prozess seht einem anderen Client zur Verfügung. Hat man 50 .jpg .gif ect. dann sollte MaxKeepAliveRequests auch ~55 sein.
 
Last edited by a moderator:
Hat man 50 .jpg .gif ect. dann sollte MaxKeepAliveRequests auch ~55 sein.
So kann man das nicht rechnen. Denn fast jeder Browser macht dann mehrere Connections auf.
(Siehe bei Mozilla/Firefox die Einstellung "network.http.max-connections".)

huschi.
 
Back
Top