まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2008/01/15(火)Apache 2.2/worker で ServerLimit が効かない?

PerlInterpMaxを解析後、正しくApacheに ServerLimitを設定しているにも関わらず、またデータベース接続エラーが。ps ax すると、httpd(Apache)のプロセスが9個ぐらい起動してました(汗*1

あれバグ? それとも仕様??

検索してみても、同様の報告しかみつかりませんでした*2。調べてみると

    MaxRequestsPerChild   1000

を越えたときに、古いプロセスがうまく殺せていないようです。mod_perl が影響しているかどうかは不明です。とりあえず、MaxRequestsPerChild 0 にして様子をみようと思います。

*1 : サービスを受付ない親プロセスが1つ多く起動しますが、それは除く

*2 : このサーバはSolarisではないですが

推測

MySQL環境で同様の設定もしても再現しないことから、おそらく PostgreSQL で Connection を永続させているため、ネットワークコネクションがすべて切れない(Apacheがコネクション=クライアント接続中)と勘違いしてプロセスが Kill されないせいと思われます。*3

PostgreSQL への接続に UNIX ドメインソケットを使っているせいでタイムアウトの設定ができない(汗

*3 : MySQLではコネクションを永続させても、MySQL側が自動的にタイムアウトをして接続を切る。