次のページ2010/04/20(火)ApacheのRLimitMEMが効かないプログラム::cgiCGI開発中についうっかり無限ループを生成するなんて経験のある人も多いと思いますが、つい最近2回連続でサーバごと落としてしまったので*1本格的に対策しました。メモリオーバーフローでカーネルが端からプロセスを殺し始めてサーバ停止RLimitMEMとRLimitCPUApacheにはもともとCGIのメモリやCPU使用量を制限する設定があります。それがRLimitMEMとRLimitCPUです。それぞれ「メモリ(リソース)使用量」と「CPU時間使用量を制限する」もので、制限値を超えた瞬間にプロセスを殺してくれます便利なものです。30もちろんこれは設定していたのですが......。kernelの機能によります。コマンドで監視していいたら普通に500MBのメモリを食ってます。RLimitMemやRLimitCPUが効かないようです。mod_fcgidでは効きません。mod_fcgidを使用していました。Perl自体は別プロセスで起動しているので効くのかと思ったのですが、どうやら無効なようです(汗)。ちなみに通常CGIの他、SpeedyCGIは効きます。普段はSpeedyCGIで開発するのですがImageMagick問題のせいでFastCGIを使っていました。Apache自体に制限を掛けるApache自体のメモリ消費量に制限をかければ、万が一無限ループなどで暴走してもサーバ落ちを防ぐことができます。Apache自体は落ちてしまいますが、サーバが落ちるよりは100倍マシです。1048576と記述することで制限を加えることができます。書き加えればよいようです。プロセスのみが落ちてくれました。謎は残るけど、とりあえず目的は達成したのでこれで。IISもダメダメでした。動かないという報告がありまして、対応外なのですが調査してみました。処理が怪しいようです。使えない*1のだそうで。試しに動作させたらメモリを食う暴走して危険でした(汗)。Otherとは何であるか原因を説明する前に、adiaryのログイン時の動きを確認しておきましょう。時点で「Cookieが有効になっていません」とエラーになります。いうものがありまして、これはHTTP/1.1対応ならば使えます。