web-dev-qa-db-ja.com

MaxClientsでハングしているApacheに到達しました

私のApache2.2(プリフォームMPM)は、MaxClientsに到達するとハングし、子プロセスが解放されたときにリクエストをキューに入れて処理するのではありません。これが発生すると、Webサーバーは、手動で再起動するまで完全に応答しなくなります。

サーバースタックはUbuntu8、MySQL 5、PHP 5.ハードウェアは2GBのRAMを搭載したDualXeons(2.8)です。1日あたり30,000〜50,000ページビューを提供します。静止画像、CSS、およびJSは別のサーバーにオフロードされ、PHPはeAcceleratorを使用してキャッシュされます。多くのページのHTML出力は、ファイルシステムにキャッシュされます。

関連するApacheディレクティブ:

KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 2
StartServers          2
MaxClients          150
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   2000
</ code>
5
Ash White

サーバーがスワップしているようです。 Apacheプロセスに16MBを使用すると仮定すると、サーバーの容量(2GB)を超えて150 x 16MB = 2400 MB

Apacheで使用されているメモリを確認してください。MaxClientsの値を減らす必要があると思います。

これについての詳細は、Apache Performance Tuningの ハードウェアとOSの問題のセクション にあります。

3
hdanniel

タイムアウト変数は何に設定されていますか?

設定していない場合は、プッシュダウンすることをお勧めします。

Timeout 30

HDが言っているように、MaxClientsをドロップダウンするか、RAMを増やして、スワップにヒットしないようにすることをお勧めします。

1
Dave Drager

MaxClientsを計算し、デフォルト値ではなくそれに基づいて値を設定します。

最大クライアントの計算

まず、トラフィックが多いときにApacheの子の平均メモリを計算します。

それをApacheに割り当てたいメモリで分割します。

あなたの場合、ウェブサーバーに1 GBのRAMを割り当て、平均プロセスメモリ使用量が16 mbの場合、1000 MB/16 = 62

これは、指定する必要があるmax_client値です。

また、ワーカーではなくプリフォーク用に構成していることを確認してください

私が間違っていない場合、これらはpreforkの変数です-

MinSpareServers

MaxSpareServers      

MaxClients          

MaxRequestsPerChild   

同じマシンでmysqlとApacheを実行しているため、さらにRAMを追加する必要があります。そうしないと、メモリが不足してスワッピングが開始されます。これにより、さらに速度が低下します。

0
Kevin Parker