Meine Website ist superlangsam, aber die CPU-Auslastung beträgt nur 25 %

Meine Website ist superlangsam, aber die CPU-Auslastung beträgt nur 25 %

Ich habe 2 Server für meine Website:

  • Ein Server mit 256 GB RAM 20 c/40 t für MySQL
  • Ein Server mit 256 GB RAM, 20 c/40 t für Apache

Der MySQL-Server ist immer in Ordnung (30–50 % der CPU werden verwendet).

Aber der Apache-Server wird SUPERLANGSAM, wenn meine Website 10.000 gleichzeitige Besucher hat (5.000 Seiten werden pro Minute geladen). Seltsamerweise erreicht dieser Server sein Limit noch nicht, da die Speicherauslastung der CPU bei etwa 20-30 % liegt.

Dies ist die topRückgabe auf dem Apache-Server (wenn die Website mit 10.000 Besuchern superlangsam ist).

top - 22:04:17 up 22:34,  1 user,  load average: 12.61, 13.59, 13.47
Tasks: 2139 total,  20 running, 2119 sleeping,   0 stopped,   0 zombie
%Cpu(s): 28.2 us,  7.2 sy,  0.0 ni, 63.0 id,  0.0 wa,  0.0 hi,  1.6 si,  0.0 st
KiB Mem : 26410644+total, 17146396+free,  8632064 used, 84010416 buff/cache
KiB Swap:  1047548 total,  1047548 free,        0 used. 25449820+avail Mem

Es ist, als ob es eine Begrenzung für die CPU-Auslastung dieses Servers gäbe.

Und das ist die Konfiguration des Apache-Servers:

keepalive: Off
keepalivetimeout: 2
maxclients: 3000
maxkeepaliverequests: 1000
maxrequestsperchild: 15000
maxspareservers: 300
minspareservers: 150
serverlimit: 3000
startservers: 1000
timeout: 300

Und ich sollte präzisieren, dass ich gestern 128 GB RAM für den Apache-Server hatte und die Website 13.000 gleichzeitig verbundene Besucher unterstützen konnte, bevor sie superlangsam wurde. Also habe ich beschlossen, auf 256 GB RAM umzusteigen, aber das Ergebnis ist noch schlimmer ...

Irgendwelche Ideen?

Ich verwende WHM.

(Entschuldigung für mein Englisch)

Antwort1

„Die MaxClients-Direktive legt die Grenze für die Anzahl gleichzeitiger Anfragen fest, die bedient werden. Alle Verbindungsversuche, die die MaxClients-Grenze überschreiten, werden normalerweise in die Warteschlange gestellt, bis zu einer Zahl, die auf der ListenBacklog-Direktive basiert. Sobald ein untergeordneter Prozess am Ende einer anderen Anfrage freigegeben wird, wird die Verbindung bedient“ (Ref.http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients).

Wenn Sie tiefer in die entsprechenden Dokumente schauen, werden Sie herausfinden, wie Sie auch "serverlimit" und "maxrequestsperchild" verwalten können, gemäß derVorgabel/ArbeiterMPM, um die von Michael Hampton beschriebene Situation zu vermeiden (sehr aufschlussreich!).

Durch die Überprüfung der Protokolle sollten Sie außerdem einige Beweise hierfür finden.

verwandte Informationen