2011/06/01(水)apache2がOut Of Memoryで落ちる
2011/06/01 18:07
Out of Memory: Killed process #### (****)半月~1月おきくらいで、上記メッセージがコンソールにあふれて操作不能・サーバ落ちとなる。****の部分はcgiの名前が出ているのだが、必ずしも同じものではない(adiaryが多いといえば多い)。
色々調べてみたのだが、
#apache2 -Vでみてみると、Worker MPMが動いている。topでみると255MBくらい仮想メモリを食ってるapache2プロセスが2つある。むむむ。
debianがなぜWorkerをメインに切り替えたのかは不明だが、preforkの方が実績がある上、うちのサイトではマルチスレッドで恩恵を受けるアプリはほとんどない。今回の件からもWorkerの方が考えなければいけない(設定しなければいけない)事項が多そうであるので、preforkに切り替える。
ApacheのMPM、「prefork」と「worker」を切り替える方法 – FlatLabs
まあdebianの場合、これだけでいいようだ。
#aptitude insatll apache2-mpm-preforkこれでmpm-workerが競合として検出され、最初に提示された解決方法がmpm-worker削除のみだったのでそれを選択。
また、設定ファイルもメンテした。httpd.confにはMaxRequestsPerChildが入ってたのだが、apache2.confのディレクティブには0指定されており利いてなかった可能性が高い。メモリリークが積まれていた可能性がある。
#diff apache2.conf.orig apache2.conf 103c103 < MaxRequestsPerChild 0 --- > MaxRequestsPerChild 100100回ごとにプロセス再起動することで、リークの蓄積を回避する。
#apache2ctl configtest #apache2ctl restartして、アクセスなど問題ないことを確認。
しばらく様子見。