Extrem lange Ladezeiten oder Timeout

ramsolus

New Member
Hallo,

ich habe einen Server mit Debian 7.8 und Plesk 12.
Seit einiger Zeit brauchen Webseiten mehrere Minuten zum Laden, obwohl massig Kapazitäten verfügbar sind.
Folgend die Eckdaten:
CPU GenuineIntel, Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Version Parallels Plesk v12.0.18_build1200140606.15 os_Debian 7.0
OS Debian 7.8
RAM 32GB

Verbraucht sind immer nur rund 2GB RAM bei 0.2 Load

Hier ein Auszug aus der apache.conf:
Code:
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
    StartServers           5
    MinSpareServers        5
    MaxSpareServers       10
    ServerLimit          150
    MaxClients           150
    MaxRequestsPerChild 4000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadLimit: ThreadsPerChild can be changed to this maximum value during a
#              graceful restart. ThreadLimit can only be changed by stopping
#              and starting Apache.
# ThreadsPerChild: constant number of worker threads in each server process
# MaxClients: maximum number of simultaneous client connections
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
    StartServers         5
    ServerLimit		 70
    MinSpareThreads      5
    MaxSpareThreads      70 
    ThreadLimit          64
    ThreadsPerChild      32
    MaxClients           150
    MaxRequestsPerChild 1000
</IfModule>

# event MPM
# StartServers: initial number of server processes to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxClients: maximum number of simultaneous client connections
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_event_module>
    StartServers         5
    MinSpareThreads      5
    MaxSpareThreads      20
    ThreadLimit          64
    ThreadsPerChild      32
    MaxClients           350
    MaxRequestsPerChild 10000
</IfModule>

An welchen Parametern könnte es liegen? Ich komme leider kein Stück mehr weiter.

Vielen Dank im Voraus.
 
Was sagt denn "apache2ctl status"?
Die Beschreibung klingt spontan nach eins von beiden folgenden:
a) DNS Lookup Probleme (das tritt dann nur beim ersten Zugriff auf)
b) alle Worker/Threads sind belegt, sei es durch Fehlkonfiguration oder Angriff.

Du kannst dir (und uns) ein detailliertes Bild der Ladezeiten mit folgendem Tool erstellen: http://tools.pingdom.com/fpt/
 
Hi!
Danke für die rasche Antwort.
Code:
Apache Server Status for localhost

Server Version: Apache/2.2.22 (Debian) DAV/2 mod_ssl/2.2.22 OpenSSL/1.0.1e
    Apache mod_fcgid/2.3.9
Server Built: Dec 23 2014 22:48:29

-------------------------------------------------------------------------------

Current Time: Tuesday, 19-May-2015 20:46:44 CEST
Restart Time: Tuesday, 19-May-2015 19:12:18 CEST
Parent Server Generation: 0
Server uptime: 1 hour 34 minutes 26 seconds
Total accesses: 15201 - Total Traffic: 29.1 MB
CPU Usage: u84.85 s21.88 cu0 cs0 - 1.88% CPU load
2.68 requests/sec - 5.3 kB/second - 2005 B/request
150 requests currently being processed, 0 idle workers

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWW

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

Wenn ich eine der Domains auf dem Server auf der von dir gesandten Seite teste, kann garkeine Verbindung hergestellt werden. Timeout. Auch ich selbst kann mittlerweile keine Verbindung mehr herstellen, obwohl laut top zig leere Apache-Prozesser verfügbar sind.

Wo du DNS erwähnst: Ich nutze Plesk als Primary-DNS und habe einen vServer als secondary DNS. Kann hier in einer Fehlkonfiguration der Fehler liegen?


Beste Grüße und Vielen Dank!
 
obwohl laut top zig leere Apache-Prozesser verfügbar sind.
Top ist eine sehr ungeeignete Methode um den Zustand eines Webservers zu überprüfen - zumal du vermutlich (da fcgid) threaded Webserver hast, also jeder Prozess mehrere Verbindungen abarbeiten kann.
Hier wäre "lsof -nP -i :80" deutlich aufschlussreicher wenn es nicht die Apache-eigenen Werkzeuge sein sollen.

Dein Server ist, wie der Status deutlich ausgibt, voller Verbindungen welche bearbeitet werden. Das sieht auf den ersten Blick eher seltsam aus da du betonst dass der Server nichts zu tun hat. Hier wäre also die Logdatei des Webservers sehr aufschlussreich.
Sehr oft (wenngleich nicht immer) bedeutet ein belasteter Server ohne dass der Admin darum weiss etwas sehr Böses...
 
Naja, es liegen schon gut 50 Live-Sites auf dem Server.
Wäre dann ServerLimit hochzusetzen die Lösung, bspw. auf 400 ServerLimit?
Es scheinen zig Verbindungen zu laufen, was gut möglich ist.

Ist das folgende Muster korrekt? Was sagen mir die Ports aus?
apache2 16130 www-data 175u IPv6 291073 0t0 TCP XXX.XXX.XXX.XXX(MEINE IP):80->37.48.104.216:38728 (CLOSE_WAIT)
apache2 16130 www-data 176u IPv4 292799 0t0 TCP XXX.XXX.XXX.XXX(MEINE IP):54039->5.135.4.22:80 (ESTABLISHED)

Ich habe gerade versucht den Wert von ServerLimit und MaxClients auf 600 zu setzen und mittels "apache2ctl status" versucht, die Zahl der freien Prozesse mir anzeigen zu lassen. (Hoffe das war vom Denkansatz her korrekt?)
Plötzlich sinkt jedoch die Zahl der Worker auf 188, siehe
188 requests currently being processed, 0 idle workers
 
Last edited by a moderator:
Als Allererstes, bevor wild in der Konfig rumexperimentiert wird, muss mal festgestelllt werden welcher MPM zum Einsatz kommt. Davon ist abhängig ob du in der Konfig von mpm_prefork oder mpm_worker arbeitest - oder sogar einem Anderen.
Die einfachste Lösung wäre "apache2ctl -l", dort sollte dann "prefork" oder "worker" aufrtauchen.

Beachte dass ein hohes Maxclient dir nichts bringt wenn du dadurch ans Ram-Limit gerätst und der Server swappen muss. Hier sollte also nicht ein blind hoher Wert gesetzt werden sondern ein tatsächlich sinnvoller Wert. In anderen Worten: rumprobieren!

Ist das folgende Muster korrekt? Was sagen mir die Ports aus?
apache2 16130 www-data 175u IPv6 291073 0t0 TCP XXX.XXX.XXX.XXX(MEINE IP):80->37.48.104.216:38728 (CLOSE_WAIT)
apache2 16130 www-data 176u IPv4 292799 0t0 TCP XXX.XXX.XXX.XXX(MEINE IP):54039->5.135.4.22:80 (ESTABLISHED)
Der client-seitige Port ist zufällig vom Client gewählt. Hier siehst du 2 Verbindungen, eine davon ist dabei geschlossen zu werden und eine ist aktiv. Ob die aktive Verbindung aber tatsächlich Daten überträgt oder bspw über keepalive nur (dringend notwendige) Prozesse belegt ist hieraus nicht ersichtlich.

Naja, es liegen schon gut 50 Live-Sites auf dem Server.
Wie gut besucht sind deine live-seiten denn? Bei einem durchschnittlichen Server und einer durchschnittlichen Seite sollten mehrere dutzend Anfragen pro Sekunde bearbeitet werden können - bei Optimierung teilweise sogar hunderte. Die Anzahl der vHosts allein sagt hier noch nichts aus.
 
Back
Top