メール・サーバー用ベンチマーク・ツール Postal

 Postalプロジェクトが提供するスイートには、メール・サーバーのパフォーマンスを測定するためのプログラムが3本含まれている。その中心となるのは、指定された頻度で指定された宛先リストに電子メールを送るプログラムpostalだ。これを利用すると送られてきた電子メールを処理する速度がわかり、したがってメール・サーバーの強化に先だってソフトウェアやハードウェアの変更によって得られる改善の程度を知ることができる。たとえば、現状のハードウェアのままでIMAPサーバーを変更したとき1秒間に処理可能な電子メール通数が向上するかどうかを予測することができる。

 Postalスイートには、このほか、指定された頻度でメール・サーバーにポーリングし新着電子メールを取り出すPOPクライアントrabidと、送られてきた電子メールをすべて破棄するサーバーとして機能するBlack Hole Mailer(bhm)がある。

 PostalのパッケージはUbuntu Hardy用のものはあるが、FedoraやopenSUSE用はない。そこで、Postalバージョン0.70のソースを使って64ビットFedora 8マシン上でビルドした。手順は通常の「./configure; make; sudo make install」。コンパイルで問題が発生したが、configureオプションに--disable-gnutlsを付けることで解消した。

 postalコマンドの主なパラメーターは4つ、電子メールの宛先を列挙したファイルの名前、電子メールの送信者のアドレスを列挙したファイルの名前(-f)、送信先SMTPサーバーのアドレス、SSLを使って送信する割合(-s 0)だ。補助的なパラメーターとして、起動するスレッドの数(-t 1)、送信する電子メールのサイズ(KB単位)の最小値と最大値(それぞれ-m 10-M 0)、1分間に送信する電子メールの目標通数(-r 24000)がある。

 たとえば、スレッドを2本立て、localhost上のメール・サーバーに、同じマシン上の2つのアドレスを宛先とする電子メールを1分間に30通の頻度で送る場合の例を以下に示す。まず電子メール通数を少なく設定してメールボックスと正常動作を確認する。確認できたら、1分間の電子メール通数を指定する-rパラメーターの値を増やして、SMTPサーバーへの負荷を上げる。コンソールには送信されたデータ量と、正常処理またはエラーとなった電子メール通数が表示される。後者の数字が重要だ。表示は1分ごとに更新される。

# cat user-list-filename
ben@localhost
toast@localhost
# postal -t 2 -r 30  localhost user-list-filename
time,messages,data(K),errors,connections,SSL connections
22:07,2,16,0,4,0
22:08,30,164,0,30,0
22:09,30,149,0,30,0

 コマンドが生成する電子メールのメッセージ本文はランダムなものだが、末尾にMD5:という文字列とメッセージ本文のmd5チェックサムが付く。したがって、これを使ってメール・サーバーが電子メールを正常に処理したかどうかを調べることができる。上の例の場合、電子メールはlocalhost上のbenとtoastから同じ2人に送られる。単にシステムが処理可能な電子メール負荷を見たいだけの場合は、このように送信者と宛先に同じリストを使っても問題はない。送信者リストを別途指定したい場合は、-fコマンドライン・パラメーターを使って送信者アドレスを列挙したファイルの名前を指定する。

rabid

 postalコマンドが電子メールを送信するためのプログラムだったのに対し、rabidコマンドはそれを取り出すプログラムだ。したがって、コマンドライン・パラメーターの中にはpostalのパラメーターに類似したものがある。1分間の接続数の上限を指定し電子メールを取り出す頻度を一定に保つ-r。生成するrabidプロセスの数を指定し同時に複数のアカウントの新着電子メールを調べるための-p。SSLを使って電子メールを取り出す数を指定する-s。パラメーターにはこのほか、POPサーバーのアドレス、新着電子メールの有無を調べるアカウントを列挙したファイルの名前がある。このファイルの内容はpostalの場合とほぼ同じだが、列挙した各アカウントにはそのアカウントの電子メールを取り出すためのパスワードも指定する(区切りは空白1つ)。なお、このPOPパスワードを含むrabid用ファイルはpostalコマンドでも使うことができる。この場合、postalはパスワードを無視し、各行の始めにある電子メール・アドレスだけを使用する。

 たとえば、SSL接続上のPOPを使って2つのアカウントを調べる場合の例を下に示す。-uオプションを付けると各アカウントのメール・アドレスのユーザー名部分だけが使われるのだが、このオプションを指定しben@localhostのような電子メール・アドレスを使うと認証で問題が発生した。このとき、ファイルの各行から@localhostを削除すると正常に認証される。ここで、例で使われているオプションについて説明しておこう。-r 5はメールを取り出すための接続を1分間5回に制限する。-p 2はプロセスを2本生成し2つのアカウントから同時に電子メールをダウンロードできるようにする。-s 100はすべての接続にSSLを用いることを指示する。

 ポートの指定はhostname:portとするのが通例だが、このツールではこれと異なり、ホスト名を角括弧で囲みその直後にポート番号を書く。user-list-filename.rabidの各行は、先頭部分はuser-list-filenameと同じだが、その後に空白を1つ置き、そのアカウントの電子メールを取り出すためのPOPパスワードを指定する。

# cat user-list-filename.rabid
ben password1
toast password2

# rabid -r 5 -p 2 localhost user-list-filename.rabid
time,messages,data(K),errors,connections,SSL connections,IMAP connections
...
# rabid -r 5 -p 2  -s 100 [localhost]995 user-list-filename.rabid

 postalで生成したメッセージ本文とrabidで取り出したメッセージ本文は一致するはずだが、rabidのメッセージ本文が壊れている例が多数あった。環境は、ほぼ標準的なFedora 8インストール、sendmailバージョン8.14.1-4.2.fc8、uw-imapバージョン2007b-1.fc8だ。原因は現在調査中。

...
MD5 mis-match, calculated:bb2e26c3312af5df15615f71ec5fa0bd, expected e42c889641ffdf348ae20d8c8d055dd2!
Account name ben
...

 Black Hole Mailerプログラムは、メーリングリスト・サーバーの性能を測定する場合など、多数の宛先に送られた電子メールの処理状況を調べるのに便利だ。

まとめ

 メール・サーバーの負荷がかなり重い場合に、サーバーの構成を変えて実験したいときや、ハードウェアの増強でパフォーマンスが見込みどおり改善するかどうかを調べたいときなどにpostalは便利だ。電子メールの生成や取得の頻度を指定することができるので、電子メール・サーバーのパフォーマンスに影響するシステムのいろいろな側面について実験することができる。たとえば、サーバーサイド・スパム・フィルタリングのために送られてきた電子メールが拒否されてしまう可能性を調べることができる。

Ben Martin 10年以上にわたってファイルシステムを研究。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。

Linux.com 原文