web-dev-qa-db-ja.com

高CPU mod_fcgid:プロセススロットを適用できません

次の警告が表示されます。

mod_fcgid:/ var/www/cgi-bin/cgi_wrapper/cgi_wrapperのプロセススロットを適用できません

この警告が表示されるとすぐに、サーバーのCPUが97%-101%に上昇します

サーバーは毎日約14万ページビューを取得します。この警告は主に11:00〜12:00前後に表示されます。アナリティクスで計算された14万ページビューの他に、ウェブサイトにテキスト広告を表示しているサードパーティのウェブサイトからのリクエストも行われます。約2700のWebサイトが1つの広告を表示し、サーバーに対して1時間あたり合計22139のリクエストを送信しています。

私は試した: chmod 755 /var/log/httpdですが、/ var/logに「httpd」というフォルダはありません

MaxSpareServersとMaxClientsを可能な限り高い値に調整してみました。しかし、まったく影響しません。 Apacheが再起動した後、しばらくの間は問題ないようです(サーバーの応答はまだ少し遅く、警告はログファイルに表示されなくなりました)。しかししばらくすると、同じ警告が表示され、CPUが再び上昇します。

誰か提案があれば教えてください、ありがとうございます。

14
Rens Tillmann

この警告は、FastCGIプロセスプールが使い果たされ、FcgidMaxProcessesのグローバル制限とFcgidMaxProcessesPerClassのスクリプトごとの制限があることを通知します( http://httpd.Apache.org/mod_fcgid/mod/mod_fcgid。 html#fcgidmaxprocesses )。

このプールのサイズは、次の情報で調整できます。

  • アプリケーションがCPUにバインドされていて、速度を低下させたくない場合は、FcgidMaxProcessesをサーバー上のCPUコアの数に設定します。サーバーの平均負荷は、ピーク時にこの数値になる傾向があります。あなたのサーバーはスローダウンすることなくクライアントにサービスを提供しますしかしは追いつくためのいくつかのリクエストも拒否します。拒否はサーバー側で「プロセススロットを適用できません」と記録され、クライアント側で503エラーとして表示されます
  • アプリケーションが完全にCPUにバインドされていない(一般的な)場合、たとえば、データベースサーバーがかなりの量の応答(または他のI/Oまたはリモートリソース)を待機する場合、FcgidMaxProcessesの数がCPUコア。経験則として、私は2倍のCPUコア数から始めて、1日のピーク平均負荷をチェックします(1週間がより良いです)。次に、平均が最大になるまで調整します。負荷= CPUコアの数。

いずれの場合でも、FcgidMaxProcesses(1000)のデフォルト値は法外です。ダム 'ab -c100 -n10000

念のため、別の言い方をすると、「プロセススロットを適用できません」エラーは通常のエラーです。サーバーにリソースの固定量、およびそれらの制限に達する可能性があります。あなたがその制限を高いwrtにプッシュした場合。サーバーのリソースに警告が表示されることは二度とないかもしれませんが、サーバーは負荷の下で崩れます。

また、BTW、MaxSpareServers、MaxClientsは問題に関係なく、FastCGIプロセスプールではなく、Apacheプロセスプールを規制します。これは別のトピックです。

31
zerodeux