Nachdem ich mir am Kopf gekratzt hatte, um herauszufinden, warum meine Site so langsam reagierte, obwohl die Serverressourcen in Ordnung sind, überprüfte ich schließlich den Apache-Status und stellte fest:
78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers
Es scheint, dass mein Apache buchstäblich mit Verbindungen ausgelastet ist. Jeder, der versucht, meine Website zu besuchen, wird auf eine "Warteliste" gesetzt, bis Apache wieder frei ist.
Es scheint, ich habe zwei Möglichkeiten.
A) Erhöhen Sie das maximale Verbindungslimit über 256. Obwohl es laut diesem Artikel nicht so einfach ist:
Standardmäßig hat der MaxClients-Parameter ein kompiliertes Hard-Limit von 256. Dies kann jedoch durch erneutes Kompilieren von Apache geändert werden. Einige Distributionen oder Hosting-Unternehmen erhöhen diese Grenze auf einen sehr hohen Wert, z. B. 512 oder sogar 1024, um mit großen Lasten fertig zu werden.
B) Suchen Sie Skripte, die zu viel Zeit in Anspruch nehmen. Dies scheint mir viel schwieriger zu sein, da die meisten Apache-Prozesse nur erscheinen und dann wieder verschwinden. Außerdem sind die PHP-Skripte meiner Websites ziemlich gut optimiert ... und auch hier sind die Serverressourcen in Ordnung:
Server load 2.69 (8 CPUs)
Memory Used 25.33% (2,039,108 of 8,048,804)
Swap Used 1.32% (54,156 of 4,095,992)
Welche Option (wenn eine davon) sollte ich wählen und wie soll ich das tun?
BEARBEITEN
Weitere Informationen: Serverversion: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635
HTTP Conf: http://pastebin.com/yBeLt6mP
Beispiel für eine paritale Anfrage: http://pastebin.com/vzUVDMPR
Schalten Sie Text-Wrap um, wenn die Paste-Bins seltsam erscheinen.
quelle
Antworten:
Dieser Artikel ist ungenau;
MaxClients
kann bei Verwendung des Prefork-MPM über 256 angehoben werden (was ich davon ausgehe, dass Sie es derzeit verwenden, basierend auf Ihrer Beschreibung des Problems). Aus der Dokumentation :ServerLimit
ist diejenige, die das hart kompilierte Limit hat, aber es ist weit über den Punkt hinaus, an den Sie jemals gelangen sollten, ohne dass Ihr Server auf einen anderen Engpass stößt. Dokumentation :Wenn Sie also Ihr Kundenlimit auf etwa 512 erhöhen möchten, dann:
Sie sollten sich auch ansehen, welches MPM Sie verwenden, da andere MPMs als Prefork besser für die Skalierung geeignet sind. Sehen Sie hier für weitere Informationen.
quelle
httpd -l
. Ich denke, das bedeutet, dass ich Worker MPM betreibe?MaxClients
,ServerLimit
,ThreadsPerChild
, undThreadLimit
. Können Sie Ihre aktuelle Worker-Konfiguration von bereitstellenhttpd.conf
?Ich würde vorschlagen, dass Sie einen Reverse-Proxy verwenden, so etwas wie nginx oder lighttpd kann viel mehr Verbindungen als Apache verarbeiten. Abhängig davon, wie Ihre Websites htaccess verwenden, können Sie auch nginx / lighttpd mit fcgi verwenden und auf Apache vollständig verzichten.
quelle
httpd.conf
und Ihre Lösung besteht darin, den größten Teil der von ihm ausgeführten Software herauszureißen und zu ersetzen?! Jede Software hat ihre Probleme, aber ungebildeter Missbrauch verursacht schlimmere Probleme.