TenForward

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

rabid

rabid は postal 付属の POP3 サーバのパフォーマンス測定を行うツール.

そのマニュアルのオプション指定の超訳 (誤訳かも?)

      rabid  [-r  max-connections-per-minute] [-p processes] [-l
      local-address]  [-c  messages-per-connection]   [-a]   [-s
      ssl-percentage]  [-i  imap-percentage]  [-b qmail-pop] [-d
      download-percentage[:delete-percentage]]           [-[z|Z]
      debug-file] [-u] pop-server user-list-filename
pop-server
メールをダウンロードするメールサーバのアドレスかホスト名を指定する.110番ポート以外を指定したい場合は,ホストアドレスを角括弧で括り,直後にポートを指定する ([popserver]995 みたいに.良く使われるようにコロン等は要らない).全接続で DNS でん名前解決をしたければ (例えばラウンドロビンDNSのテストのために),ホストアドレスの前に '+' を置く.
user-list-filename
ユーザのemailアドレスとパスワードのリストが含まれたファイルの名前.一行にアドレスと,直後に空白で区切られたパスワードが書かれたファイル.
process
別々のコネクションを生成するために fork するプロセスの数.良く設定されたメールサーバは,無制限に接続を受け付けない.なので,メールサーバに設定された接続数以上の数を設定しないように注意すべき.さらに,有効な結果を得るために,実運用の参考にならないような結果になるような,サーバ負荷を与えないように注意すること.
max-connections-per-minute
プログラムが生成するコネクション数を制限するためのもの.システムに負荷があるとき,他のプログラムのパフォーマンスに与える影響を調べたいときに使う.デフォルトは 1 分間で 24000 接続である.
messages-per-connection
一回の POP セッションでダウンロードするメッセージの最大数を指定する.デフォルトは -1 で無制限.
local-address
外向きのコネクションにどのローカル IP アドレスを使うかを指定する.リモートアドレスと同じように指定する.
-a
すべてロギングする.受け取った全メッセージデータがログされる.非常に遅くなるので,高速なイーサネットリンクをあふれさせるようなことは出来ない.
-s
SSL/TLS 接続の割合を指定する.デフォルトは 0.
-i
IMAP 接続の割合を指定する.デフォルトは 0.
-b
"-b qmail-pop" と書くと,qmail の POP サーバが作り出す壊れた文字列に対するエラーを出力しない.qmail の POP サーバはメッセージの最後にブランク行を追加する.
-d download-percentage[
delete-percentage]:ダウンロードするメッセージの割合と,ダウンロード後に消去するメッセージの割合.デフォルトは 100%.
-u
ユーザ名(フィールド)のドメイン名を無視する.postal と rabid で同じユーザファイルを使用するために,このオプションを使用する.デフォルトでは postal はパスワード欄は無視する.rabid は,ドメイン名は必ずしも必ではない.デフォルトではドメイン名の部分も (ユーザ名として) 使用する (複数ドメインを管理するサーバで必要な事があるため).
-z
デバッグファイルのベースを指定する.スレッド毎に 1 ファイル生成される (ここで指定した名前に":"を付けた後スレッド番号を付加した名前).それぞれのファイルは,そのスレッドのデバッグのために全 IO が記録される.
-Z
も同じくデバッグファイルのベースを指定.":" の後にコネクション番号を付加した名前になる.

"-u" オプションをうまく動いてないような気がするなあ."user1@example.com pass" と書いたファイルを -u 付きで実行すると,ユーザ名は "user1",パスワード "example.com" で実行してやがるような...

これで man 通りに動くような.

--- userlist.cpp.orig	2008-10-07 18:48:22.000000000 +0900
+++ userlist.cpp	2008-10-07 18:49:38.000000000 +0900
@@ -38,7 +38,7 @@
         strtok(buf, "@");
       m_users->push_back(buf);
       if(usePass)
-        m_passwords->push_back(buf + strlen(buf) + 1);
+        m_passwords->push_back(pass);
       if(strlen(buf) > m_maxNameLen)
         m_maxNameLen = strlen(buf);
     }

ただ,実行しても,現時点では

MD5 mis-match, calculated:d5e3456283992dc6d1ad3febf0eea595, expected 29a11479477a9f96494850b31454a2fe!

などとエラーが出て,肝心のどれだけメッセージを取得したか? がさっぱり出てこない.使えないなあ...(何かコツがあるのかな?) ここにも同じ話が