私のウェブサイトは超遅いですが、%CPU は 25% しかありません

私のウェブサイトは超遅いですが、%CPU は 25% しかありません

私のウェブサイトには 2 つのサーバーがあります:

  • MySQL 用の 1 台のサーバー 256GO RAM 20c/40t
  • Apache用のサーバー1台、256GO RAM 20c/40t

MySQL サーバーは常に正常です (CPU の 30 ~ 50% が使用されています)。

しかし、私の Web サイトに 10,000 人の同時接続訪問者 (1 分あたり 5,000 ページが読み込まれる) が訪れると、Apache サーバーは超低速になります。奇妙なのは、CPU のメモリ使用量が 20 ~ 30% 程度であるため、このサーバーがまだ限界に達していないことです。

これは、topApache サーバーで返される値です (Web サイトの訪問者が 10,000 人いて Web サイトが非常に遅い場合)。

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

このサーバーの CPU 使用率には制限があるようです。

Apache サーバーの構成は次のとおりです。

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

正確に言うと、昨日は Apache サーバーに 128GO RAM を使用していましたが、Web サイトは 13,000 人の同時接続訪問者をサポートできるようになり、その後は速度が極端に遅くなりました。そこで 256GO RAM に変更することにしました。結果は最悪です...

何か案は?

WHMを使用しています。

(英語が下手ですみません)

答え1

「MaxClients ディレクティブは、同時に処理されるリクエストの数の制限を設定します。MaxClients 制限を超える接続試行は、通常、ListenBacklog ディレクティブに基づく数までキューに入れられます。別のリクエストの終了時に子プロセスが解放されると、接続が処理されます」(Ref.http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients)。

関連ドキュメントを詳しく見ると、「serverlimit」と「maxrequestsperchild」を管理する方法もわかります。プリフォーク/ワーカーMPM は、Michael Hampton が描いた状況 (非常にわかりやすい!) を回避するために使用します。

また、ログを確認すると、これに関する証拠がいくつか見つかるはずです。

関連情報