qmailとPostfixのパフォーマンス比較
今の環境がqmailで、今後どちらを使うか?と言われるとPostfixなのですが、心置きなく移行するために速度の比較を行ってみました。ベンチを取るならPostfixにsmtp-sourceというソフトがついているのですが、実際に送信した時のパフォーマンスが見たかったので、実験サーバ計4台とDNSを立ち上げて普通の環境に近い形で比較しました。
実験環境(送信サーバ)
- OS:CentOS5.2(素カーネル2.6.18)
- CPU:Xeon X3220 2.4GHz core*4
- メモリー:4GB
qmail-1.03
- /var/qmail/control/concurrencyremote
- /var/qmail/control/concurrencylocal
上二つを120で作成し、配送プロセス数の上限を120にしました。
postfix-2.3.3-2
- default_process_limit = 100
をmain.cfに追加しました。プロセス数は100。他、パフォーマンスに影響ありそうな項目はデフォルトのままです。
メール送信スクリプト
#!/usr/bin/perl $from = "test@from.local"; $to = "test@send1.local"; for($i=0;$i<100;$i++){ $data = $data."012345678901234567890123456789012345678901234567890123456789012345678901234567890\n"; } for($i=0;$i<4000;$i++){ open MAIL, "| /usr/sbin/sendmail -f $from -t $to "; print MAIL "From: $from\n"; print MAIL "Subject: This is a test mail.\n"; print MAIL "\n"; print MAIL "$data"; close MAIL; }
約9KBのメールをでっち上げてます。
実験1 4000通の送信
同一サブネットのローカルサーバ1台宛に送信スクリプトを実行します。ループは4000回なので4000通の送信です。サーバのスペックは同一で、受信MTAはデフォルトのsendmailです。どちらも余計なプロセスは走ってませんし、帯域も余裕です。
- qmail 63秒
- postfix 65秒
同じ結果になりました。キューに入らずに送信されちゃったので、送信プロセスの限界っぽい。
実験2 2000通×3の送信
サーバを2台追加して、3台宛に送信してみます。ループは各2000なので合計6000通。送信プロセスは3つになります。
- qmail 132秒
- postfix 37秒
約3倍の差がつきました。postfixの結果が実験1より良いのはマルチプロセスで送信しているからでしょう。
実験4 4000通×1の正常系と4000通×2の異常系
環境は実験3と同じで、2台宛のアドレスを無効にしてバウンスメールを受け取ります。12000通送信し、8000通のローカル配送を受け取ることになります。
- qmail 571秒
- postfix 187秒
これも3倍差か〜