Mozilla Thunderbirdを使うとIMAPサーバ暴走

Linux

IMAPサーバを動かしているサーバのロードアベレージが70ぐらいになって、大変なことになっていた。

  • IMAPサーバ:dovecot-0.99.11-9.EL4 (ファイルシステムext3)
  • IMAPクライアント:2.0.0.17

状況は、ps axuするとIO待ちのimapプロセスが大量に存在する。

原因がわかったので、書いておく。
今回の場合、Trashフォルダに数万件のメールがあり、何かのメールを削除するとThunderbirdがTrashフォルダに
新規スレッドでアクセスする。
ファイルが大量にあるMaildirを見ると以下のように、ディレクトリ自体の容量が大きい。

% ls -al
drwx------   2 matsu matsu  95M Sep 20 10:19 cur
drwx------   2 matsu matsu 7.9M Sep 20 10:19 new
drwx------   2 matsu matsu 9.1M Sep 24 08:00 tmp

そのスレッドの処理にimapサーバが長時間かかる。
また、メールを削除するたびにサーバ側でimapスレッドが生成されてしまう。

そのため、ファイル削除に加えて、ディレクトリの再作成をすれば回復する。

% cd ~/Maildir/.Trash/

以下のスクリプト実行する。

for target in cur tmp new
do
  find $target -type f -exec rm {} \;
  rmdir $target
  mkdir $target
  chmod 700 $target
done

ファイルを削除するだけだと、だめ。inodeのフラグメントがあるらしく時間がかかるからディレクトリを再作成してあげる必要がある。


暴走したプロセスをkillするためのコマンドメモ。

# ps axuwwf | grep imap | grep matsu | grep -v ps | grep -v grep | gawk '{print $2;}' | xargs sudo kill  -9

ユーザ名部分の”matsu”を適宜置き換えてください。
killのsignalは(9)KILLじゃないと落ちてくれないです。

コメント