dbmailでもトラブった
送信できなくなった。調べるとSMTPが固まっていた。
問題の一つは、ディスクエラー時にもサーバが瀕死状態で動いていたことだと思う。二台のpostgresqlの同期が取れていなかった。特定の問い合わせに対してだけエラーになる。
そしてもう一つは・・今でもよく分かってない。
pgpoolのデフォルト最大接続数の32を超えると固まる。その状態でpostgresqlには接続できる。こっちはデフォルトが100か。どの部分で処理が止まっているのかいまいち分からない。既に接続が閉じているのにCLOSE_WAITで止まっていたり、そうじゃなくてもdbmailが接続を離さなかったり。
時間が来ても一向にリソースを解放する気配がないので、pgpool.confを適当に編集して対応した。num_init_children を増加させて child_life_time と connection_life_time をかなり小さい値にした。
場当たり的な解決ではあるが・・一応ちゃんと動いた。それでもスパムが一度に大量に来ると、しばらく固まる。そういうもんなの?メール処理中はDBに接続しっぱなしなの?
メールサーバのために色々組み合わせすぎて原因の特定が難しい・・。取り敢えずdbmailのソースを読んだ方がいいのかな。
しかしdbmailで検索しても何も出てこないねぇ・・。はてなキーワードにも自分だけだし。たまにヒットしたと思ったらここへのリンクだったりして。
child_life_time と connection_life_time を小さくする意味って何なんだろう・・。一応動くようにはなったけど、いちいちpgpoolの接続切ってたらコネクションプールが効かないよねぇ。。まずはpgpool抜きのpostgresqlのみでdbmailを試すべきだったか。