私のウェブサイトには 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% 程度であるため、このサーバーがまだ限界に達していないことです。
これは、top
Apache サーバーで返される値です (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 が描いた状況 (非常にわかりやすい!) を回避するために使用します。
また、ログを確認すると、これに関する証拠がいくつか見つかるはずです。