TenForward

技術ブログ。はてなダイアリーから移転しました

postal

postal というソフトで SMTPベンチマークを取ろうかなと考えているので,そのための個人的メモ.手元では 0.62.1 しか make が通らない.(← gcrypt.h にパッチ当てたら通った)

と言っても,ベンチマークを取るの自体が目的ではなく,それなりに負荷をかけて,対象となる環境がどれぐらい使えるものか?を評価するのが目的.テスト環境にはウィルスチェックゲートウェイSpamAssassin が入っているので,それなりにメールを送ってやれば,それなりに負荷も高まるだろう,といういい加減な判断.

man によると

postal  [-m  maximum-message-size]  [-p processes] [-c messages-per-connection] [-r messages-per-minute] [-s ssl-percentage]
       [-l local-address] [-a] [-b [no]netscape] [-[z|Z] debug-file] smtp-server user-list-filename conversion-filename

という使い方."-p" は最新 (0.67) では "-t" となって threads となってます.

以下は man をテキトーに抜粋して翻訳 (誤訳かも? :-p).

smtp-server
は文字通り SMTP サーバのアドレス.ここで指定したホストにたいして,直接 SMTP で通信を行いにいきます.25番ポート以外の場合は [hostname]1025 のように括弧でくくった後にポート番号を書きます(未検証).接続のたびに DNS の名前解決をするのなら (ラウンドロビンのテスト等) ホスト名の前に "+" を付けます (+hostnameみたいな)(未検証).カンマ区切りで複数のサーバを指定可能.
user-list-filename
は,送信する先のアドレスのリストで,単に 1 行に 1 アドレスを書いたテキストファイルを用意して,ここでファイル名を指定します.機械的に生成するアドレスなんかだと,ここにベースとなるアドレスだけ書いておいて,後で指定する conversion-filename で置換ルールなんかを指定して,アドレスを生成させることも可能です.
conversion-filename
先に述べたように,user-list-filename で指定した中身に対して置換などを行う場合のルールを書きます.1 行にスペース区切りで 2 つの文字列を書きます.その1行の1つ目のフィールド文字列は正規表現です.この正規表現に当てはまるものにたいして,2 つ目の命令のように置換を行います.2 つ目の文字列は,置換したくない文字は "."(ピリオド) で表し,置換する文字の部分は文字の集合を指定します.例えば "userx@example.com" とユーザリストファイルに書いたとして,"^user ....[0-9]" と書くと,"user0@example.com", "user1@example.com", ... , "user9@example.com" と 10 個のアドレスに変換されます.(これも 0.65 以降なくなっているような)
maximum-message-size
KByte表記のメッセージの最大サイズ.送信されるメッセージは 0 からここで指定したサイズの間のサイズがランダムに選ばれます.もし,コネクションレートの測定が目的であれば,0 を指定すればヘッダだけが送られます (本文なし).デフォルトは 10.
processes
同時に起動するプロセスの数.デフォルトは 1.デフォルト値はテストのパラメータとしては不適当なので,サーバの設定に合わせて適当な数を指定すること.複数サーバに対するテストでは,ここの数はサーバ毎の数となる.
messages-per-connection
1 つの SMTP 接続でメッセージをいくつ送るか.デフォルトは 1."-1" を指定すると,非常に大きな数のメッセージを送る(~4 billion).
messages-per-minute
文字通り 1 分の間に何通のメッセージを送るか.スループット.デフォルトだと 24000 メッセージ程度は送れるので,負荷を軽減したい場合に使う.
local-address
外部接続の際に使用するローカル(IP)アドレスの指定.
-a
すべてのメッセージのロギング.
-s
SSL接続の割合を指定する.0 で SSL は使わない.デフォルトは 0.
-z
デバッグ出力のファイルのベース.実際のファイル名はここで指定した名前に ":" を付けて,スレッドの番号が付加される (なのでスレッド毎に出力ファイル).
-Z
コネクション毎にデバッグ出力ファイルを作成.これも ":" + コネクション ID (って何? ^^;)