web-dev-qa-db-ja.com

非常に高負荷のLAMPサーバーを使用したApacheチューニング

時々毎秒最大400のリクエストを処理できるLAMPサーバーがあります。サーバー構成は次のとおりです。

CPU: Intel Quad Core Xeon X3430 (4 x 2.40 GHz, 8MB Cache)
RAM: 16 GB REG ECC DDR3
HD: 500 GB Enterprise Grade SATA II
OS: CentOS 64 Bit (Latest Stable)

Apache2プリフォーク設定:

StartServers      128
MinSpareServers   16
MaxSpareServers   64
ServerLimit     1500
MaxClients      1500
MaxRequestsPerChild  10000

ピーク時には、サーバーの負荷が非常に高く、CPU使用率は約90%、負荷平均は約1

サーバーのハードウェア制限か、プリフォーク構成に問題があるかわかりません-何が問題なのですか?

3
Roy

Apacheがリクエストを処理するために最大1500の子を生成することを許可しています(ServerLimit/MaxClients)-サーバーの負荷(実行キューで待機しているプロセスの数)が膨大になるのも不思議ではありません!!

質問で引用している数値を使用した1秒あたり400リクエストでの私の最初の提案は、「MySQLサーバーを独自のボックスに移動する」または「別のWebサーバーを追加してリクエストの負荷を分散する」というより良い選択です。
追加のサーバーのサイズを決定する方法を理解するには、Apacheプロセスの平均サイズを計算するためにHDDP500が回答で示したアドバイスに従ってください。新しいサーバーで実行するApacheプロセスの数を把握し、それらを処理するために必要なRAM)の量を決定します。安全マージン(ギガバイトまたは2ギガバイト)を追加することを忘れないでください。

CPU要件(速度/コア数)を把握するのは少し難しいです-各ページを生成するためにサーバーが実行する必要のある「作業」の量を考慮する必要があります。 XDebug のようなツールは、ページの生成にかかる時間を通知することで、ここで役立ちます(このテストは、アンロードされたサーバーとロード中のサーバーで実行する必要がありますが、notほとんどの場合、運用サーバーでXDebugなどのツールを使用します。)

3
voretaq7

Httpdプロセスの平均サイズはどれくらいですか?

サーバーに負荷がかかっているときに次のコマンドを実行します。

ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'

これにより、Apacheプロセスのおおよその平均サイズがわかります。

MaxClientsが高すぎる可能性があります。

2
HTTP500

CPU割り込みを調べて、ボトルネックがどこから始まるかを確認します(top経由)。前に述べたように、ServerLimit/MaxClientsをダイヤルダウンすることをお勧めします。

消費量によっては、ボックスがCPUを使い果たす能力が低下するため、速度が上がる可能性があります(すべきです)。

0
thinice