web-dev-qa-db-ja.com

Apacheは非常に多くのスレッドをフォークし、ハングします

サイトの1つを新しいサーバーに移動しましたが、サーバーが完全にハングすることがあります。最初はこれはめったに起こらず、おそらく月に1回でしたが、今では毎日起こり始めています。ハングとは、すべてのリクエストがタイムアウトし、Apache2ctlステータスを試行するか、シェルでApache2ctlを正常に試行すると、Apache2ctlが無期限に待機することを意味します。 Apache2ctlrestartを発行するだけでこの状態から抜け出します。 Apacheエラーログに何も見つからないようです。アクセスログは、Apacheが実際にリクエストを処理していないことを示しています。

現在、サーバーは主に単一のサイト、rapidshareのようなファイル共有ポータルを提供しており、約1TBのデータを提供しています。 ubuntu lucidを実行しており、8GBのRAMとクアッドコアIntel xeon cpuを備え、Apache-mpm-itkとPHP 5.2.11。

Muninが実行されており、Apacheがハングしているときは、非常に多くのスレッド(650以上)が表示されています。通常のスレッド数は約200で、約1時間で650になります。この時点でpsを実行すると、多くの子が実行されているのは確かにApacheであることがわかります。 CPUの負荷/メモリ使用量は問題ではないようです。現時点では1.1GBのRAMしか使用しておらず、負荷は0.05です。

Lighttpdまたはnginxは、この種のサイトにとってはるかに優れたソリューションであると言われています。切り替えてもかまいませんが、この設定で機能するようにしたいと思います。 (古いサーバーもApacheを実行していました)

Mpm-itkは悪い考えでしたか?私は主に、各仮想ホストを異なるユーザーの下で実行するセキュリティのためにそれを選択しました。パッケージマネージャーから取得したデフォルトの構成で実行されています。これは私が知っている悪いことですが、どの値を調整する必要があるかわかりません。

関連する可能性のあるいくつかの値を投稿しています。必要に応じて他に質問してください。

Timeout 300
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 15

<IfModule mpm_prefork_module>
    StartServers          5   
    MinSpareServers       5   
    MaxSpareServers      10  
    MaxClients          150 
    MaxRequestsPerChild   0   
</IfModule>

それで、私はどのような価値観を見るべきですか?ログをgrepする必要がある特別なものはありますか?

2
K. Norbert

Mpm-itkによって提供される追加のセキュリティが必要ない場合は、他の部分よりもlight-weightであるため、代わりにmpm-workerを使用してください。おそらく、各仮想ホストは独自のプロセス内で実行されることになり、より多くのメモリを消費することになります。

1
sybreon