トラフィックの多いサイトで、主にユーザーが生成した多くの動的コンテンツを実行しています。
サーバーは専用サーバーで、合計4つのIntel(R)Xeon(R)CPU X3210 @ 2.13GHzプロセッサーを搭載しています。サーバーに4 GBのRAMがあり、MySQLデータベースが別のサーバーで実行されていることを考慮して、ServerLimitおよびMaxClients Apacheのディレクティブの最適値を知る必要があります。パネルはCentOSのDirectAdminです。
以下は現在のディレクティブですが、5,000人を超えるユーザーがいるピーク時に、重要な遅延が発生します。ページが高速に生成されるように見える(ページ生成時間カウンターを実装した)ため、これは完全にMySQLの障害ではありませんが、長いページが応答を開始してブラウザに送信されるまでの接続遅延。
<IfModule prefork.c>
StartServers 800
MinSpareServers 20
MaxSpareServers 60
ServerLimit 900
MaxClients 900
MaxRequestsPerChild 2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5
Topコマンドを使用してサーバーを監視すると、CPU使用率がピーク時に20%〜30%を超えることはありません。 MySQLサーバーの使用率も30〜50%で、遅いクエリの修正に常に取り組んでいますが、それは別の問題です。静的ページもピーク時にロードするのに時間がかかるため、これはDBボトルネックではないことを知っています。
これらの値を最適化するためのヒントは、感謝します。
MaxClientsが高すぎます。 Apacheプロセスの現在のサイズはどれくらいですか?それを900倍します。それは4GBより大きいですか?もしそうなら、マシンはおそらくスワップになります。私は通常、ボックス内のMaxClients = 2x vCPUから始めます(grep -c processor/proc/cpuinfo)。この場合、これは約8になります。次に、MaxClients x Apacheプロセスのサイズが4GBを超えないようにしてください。
クライアントの接続タイプに応じて、そこからMaxClientsを起動できます。 (ダイアルアップユーザーはスプーンで餌をやる必要があります。)しかし、スワッピングの状況にならないようにしてください。
次に、Min、Max、およびStartサーバーをMaxClientsに設定します。専用サーバー環境でこれらを異なるものにする必要はありません。
次に、abを使用していくつかのテストを行います(ガチョウのメモとして)。
Apacheプロセスの平均サイズを取得する必要があります。この数とあなたのRAMの合計サイズで、あなたはMaxClientsディレクティブを計算することができます。これを覚えておいてください:「Webサーバーは決してスワップする必要がないはずです」( Apache Performance Tuning )
Topまたはhtopによる監視は問題ありませんが、gangliaやmuninなどの監視ツールを使用して、サーバーのすべての統計(cpu、ram、disk i/o、Apacheリクエスト、mysqlスロークエリなど)をよりよく表示する必要があります可能なボトルネックを見つけます。
Apacheのベンチマーク(ab)ツールをいじることをお勧めします。値をいじってトラフィックフローと照合し、平均読み込み時間など、どのような応答が得られているかを確認できます。その時点で、話し合っている設定をいじって、最適化してみてください。 abを使用して、パフォーマンス微調整ごとに最適なパフォーマンスのハンドルを取得できる必要があります。
私があなたの設定について話すことは本当に賢明ではありませんが、あなたはそれらとともにRAMをたくさん食べているように思われるので、あなたもRAMも考慮する必要があります設定。それはデータのない単なる推測ですが。 htopを使用すると、リソースを視覚的によく読み取ることができます。
また、負荷平均は多くのことを言うことができます。あなたの使用量が20-30%cpuのコアの合計量よりもはるかに多いのではないかと思いますが、これはサーバーが実際にどれだけハードに動作しているかを示すもう1つの指標です。