qmail送信パフォーマンス改善のテスト
前回のテストの中で、もうひとつ実験をしていました。
それは、qmailの配信速度改善です。
実験方法は単純で、concurrencylocal の数を 倍にすると、単純にローカル配送速度は倍になるのか?というものでした。
前回のテストの1回目(syslogの時)の concurrencylocal は 120 です。それを、240 にしたら配送時間は倍になるのでしょうか。qmail のインストール時に big-concurrency.patch を適用していますので、120以上に上げることができます。
同じ、syslogの状態のときに(multilogになる前に)、やってみました。
送信もしますが、受信もしますので、tcpserverの同時起動可能プロセス数(-c)は 480 に上げます。(ちなみに変更前は 240 です)
- 設定の確認
# /var/qmail/bin/qmail-showctl | grep concurrencylocal concurrencylocal: Local concurrency is 240. # ps aux | grep tcpserver qmaild 14158 0.0 0.0 1716 512 ttyp0 S 17:09 0:00 tcpserver -qv -l0 -HR -u 503 -g 502 -c 480 -x /etc/tcp.smtp.cdb 0 smtp qmail-smtpd dev_pv_web /bin/checkpassword /bin/true
では、同じように、rootからadminへ1万通送信してみましょう。何分かかるでしょうか。単純計算すると10分の半分 5 分程度で終わるような気がします。
実験結果
# sh mass_mail_test.sh start : Tue Apr 21 17:13:40 JST 2009 end : Tue Apr 21 17:26:17 JST 2009
なんと、12分以上かかりました。送信処理の最大並列数を倍にしたのに、倍にする前より多くの時間がかかってしまいました。なぜでしょう。まず、sarの結果をみてみましょう。
ちなみに、OS自体のプロセス数上限は、 6144 ですので、問題ないと思います。
# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited max nice (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 6144 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 max rt priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 6144 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
時間は、17:13:40〜17:26:17の部分です。(16:45前後のものはconcurrencylocal は 120のときのものです)
I/O負荷やプロセス数が下がっています・・・。送信処理の最大並列数を上げると、プロセス数は上がるような気はするが・・・なぜだ・・・・。
つっこみ大歓迎です><