質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

3119閲覧

postfixでsendmailコマンドの処理速度を高速化するには

teratailmacr2

総合スコア31

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/10/08 09:15

編集2020/10/09 03:44

古い以前のサーバでは1万通のメールを5分程で送り終えていましたが、サーバを変えてから同じリストに配信しても、26分程かかる様になってしまいました。

処理能力的にはまだまだ余裕があると思うのですが、どの設定項目を変更すれば早く処理出来る様になりますでしょうか?

ちなみに、メールの送信はPerlプログラムから行っています。

テストとしてforでループしながら千通のメールを送信するだけのプログラムを実行してみても、処理が終了するまで2分程かかってしまいます。
(テストは独自ドメインのサブアドレス宛に送っている為全件再送なくスムーズに全件送られます)

Perl

1for (my $i = 1 ; $i <= 1000 ; $i++) { 2 open(MAIL, "| /usr/sbin/sendmail destination+".$i."@example.com"); 3 print MAIL "From: sender@example.com\n"; 4 ~この後ヘッダやら本文やらを指定~ 5 close(MAIL); 6}

■旧サーバ
CPU Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz
RAM 1036MB
上記スペック筐体内で5つのサーバに仮想化
Debian 5.0.10
qmail 1.03

■新サーバ
CPU Intel Xeon E3-1260L
RAM 16GB
CentOS 7
Postfix 2.10.1

●main.cf

default_process_limit = 5000 smtpd_client_connection_count_limit = 200 default_destination_recipient_limit = 100 default_destination_concurrency_limit = 60 smtp_connect_timeout = 10s smtpd_error_sleep_time = 0 in_flow_delay = 0

●/var/log/maillog

Oct 5 16:00:02 s1example postfix/cleanup[9830]: 240E740525BF9: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/qmgr[10529]: 240E740525BF9: from=<return@example.com>, size=529, nrcpt=1 (queue active) Oct 5 16:00:02 s1example postfix/pickup[5790]: 37FC840525BFA: uid=1001 from=<return@example.com> Oct 5 16:00:02 s1example postfix/cleanup[9830]: 37FC840525BFA: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/qmgr[10529]: 37FC840525BFA: from=<return@example.com>, size=533, nrcpt=1 (queue active) Oct 5 16:00:02 s1example postfix/pickup[5790]: 5012040525BFC: uid=1001 from=<return@example.com> Oct 5 16:00:02 s1example postfix/cleanup[9830]: 5012040525BFC: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/qmgr[10529]: 5012040525BFC: from=<return@example.com>, size=534, nrcpt=1 (queue active) Oct 5 16:00:02 s1example postfix/pickup[5790]: 6AD0440525BFD: uid=1001 from=<return@example.com> Oct 5 16:00:02 s1example postfix/cleanup[9830]: 6AD0440525BFD: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/qmgr[10529]: 6AD0440525BFD: from=<return@example.com>, size=534, nrcpt=1 (queue active) Oct 5 16:00:02 s1example postfix/pickup[5790]: 8336A40525BFE: uid=1001 from=<return@example.com> Oct 5 16:00:02 s1example postfix/cleanup[9830]: 8336A40525BFE: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/qmgr[10529]: 8336A40525BFE: from=<return@example.com>, size=534, nrcpt=1 (queue active) Oct 5 16:00:02 s1example postfix/pickup[5790]: 9C96D40525BFF: uid=1001 from=<return@example.com> Oct 5 16:00:02 s1example postfix/cleanup[9830]: 9C96D40525BFF: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/smtp[9843]: 5012040525BFC: to=<destination+3@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, delay=0.42, delays=0.16/0.01/0.05/0.2, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: A909F41004F5)) Oct 5 16:00:02 s1example postfix/qmgr[10529]: 5012040525BFC: removed Oct 5 16:00:02 s1example postfix/qmgr[10529]: 9C96D40525BFF: from=<return@example.com>, size=534, nrcpt=1 (queue active) Oct 5 16:00:02 s1example postfix/pickup[5790]: B5F0940525BFC: uid=1001 from=<return@example.com> Oct 5 16:00:02 s1example postfix/cleanup[9830]: B5F0940525BFC: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/smtp[9846]: 6AD0440525BFD: to=<destination+4@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, delay=0.41, delays=0.17/0.02/0.05/0.18, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: BD4541C80568)) Oct 5 16:00:02 s1example postfix/qmgr[10529]: 6AD0440525BFD: removed Oct 5 16:00:02 s1example postfix/smtp[9849]: 8336A40525BFE: to=<destination+5@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, delay=0.37, delays=0.16/0.01/0.03/0.15, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: CD6BD41004F5)) Oct 5 16:00:02 s1example postfix/qmgr[10529]: 8336A40525BFE: removed Oct 5 16:00:02 s1example postfix/qmgr[10529]: B5F0940525BFC: from=<return@example.com>, size=534, nrcpt=1 (queue active) Oct 5 16:00:02 s1example postfix/pickup[5790]: D06BA40525BFD: uid=1001 from=<return@example.com> Oct 5 16:00:02 s1example postfix/cleanup[9830]: D06BA40525BFD: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:02 s1example postfix/smtp[9843]: 9C96D40525BFF: to=<destination+6@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, delay=0.39, delays=0.17/0/0.04/0.18, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: EC3311A40478)) Oct 5 16:00:02 s1example postfix/qmgr[10529]: 9C96D40525BFF: removed Oct 5 16:00:03 s1example postfix/qmgr[10529]: D06BA40525BFD: from=<return@example.com>, size=534, nrcpt=1 (queue active) Oct 5 16:00:03 s1example postfix/pickup[5790]: 00F0E40525BFE: uid=1001 from=<return@example.com> Oct 5 16:00:03 s1example postfix/cleanup[9830]: 00F0E40525BFE: message-id=<JD20201005160002.9778.sender@example.com> Oct 5 16:00:03 s1example postfix/smtp[9846]: B5F0940525BFC: to=<destination+7@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, delay=0.35, delays=0.17/0/0.05/0.13, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: 0843E41004F6)) Oct 5 16:00:03 s1example postfix/qmgr[10529]: B5F0940525BFC: removed Oct 5 16:00:03 s1example postfix/qmgr[10529]: 00F0E40525BFE: from=<return@example.com>, size=534, nrcpt=1 (queue active) Oct 5 16:00:03 s1example postfix/pickup[5790]: 178EE40525BFC: uid=1001 from=<return@example.com> Oct 5 16:00:03 s1example postfix/cleanup[9830]: 178EE40525BFC: message-id=<JD20201005160003.9778.sender@example.com> Oct 5 16:00:03 s1example postfix/smtp[9849]: D06BA40525BFD: to=<destination+8@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, conn_use=2, delay=0.38, delays=0.21/0/0.01/0.15, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: 2751D1A40569)) Oct 5 16:00:03 s1example postfix/smtp[9837]: 240E740525BF9: to=<test@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, delay=1.1, delays=0.17/0.02/0.77/0.15, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: 275391A405C0)) Oct 5 16:00:03 s1example postfix/qmgr[10529]: 240E740525BF9: removed Oct 5 16:00:03 s1example postfix/qmgr[10529]: D06BA40525BFD: removed Oct 5 16:00:03 s1example postfix/cleanup[9864]: 2E2AD40525BF9: message-id=<20201005070003.2E2AD40525BF9@s1.example.com> Oct 5 16:00:03 s1example postfix/qmgr[10529]: 178EE40525BFC: from=<return@example.com>, size=535, nrcpt=1 (queue active) Oct 5 16:00:03 s1example postfix/pickup[5790]: 3E15440525BFD: uid=1001 from=<return@example.com> Oct 5 16:00:03 s1example postfix/cleanup[9830]: 3E15440525BFD: message-id=<JD20201005160003.9778.sender@example.com> Oct 5 16:00:03 s1example postfix/smtp[9843]: 00F0E40525BFE: to=<destination+9@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, conn_use=2, delay=0.34, delays=0.16/0/0.01/0.17, dsn=2.0.0, status=sent (250 Queued! <JD20201005160002.9778.sender@example.com> (Queue-Id: 4193F4100543)) Oct 5 16:00:03 s1example postfix/qmgr[10529]: 2E2AD40525BF9: from=<>, size=2547, nrcpt=1 (queue active) Oct 5 16:00:03 s1example postfix/bounce[9861]: 37FC840525BFA: sender non-delivery notification: 2E2AD40525BF9 Oct 5 16:00:03 s1example postfix/trivial-rewrite[9557]: warning: do not list domain example.com in BOTH virtual_mailbox_domains and relay_domains Oct 5 16:00:03 s1example postfix/qmgr[10529]: 00F0E40525BFE: removed Oct 5 16:00:03 s1example postfix/qmgr[10529]: 37FC840525BFA: removed Oct 5 16:00:03 s1example postfix/qmgr[10529]: 3E15440525BFD: from=<return@example.com>, size=535, nrcpt=1 (queue active) Oct 5 16:00:03 s1example postfix/smtp[9846]: 178EE40525BFC: to=<destination+10@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, conn_use=3, delay=0.39, delays=0.22/0.04/0.01/0.13, dsn=2.0.0, status=sent (250 Queued! <JD20201005160003.9778.sender@example.com> (Queue-Id: 671CC1A40569)) Oct 5 16:00:03 s1example postfix/qmgr[10529]: 178EE40525BFC: removed Oct 5 16:00:03 s1example postfix/pickup[5790]: 66AD340525BFA: uid=1001 from=<return@example.com> Oct 5 16:00:03 s1example postfix/virtual[9868]: 2E2AD40525BF9: to=<return@example.com>, relay=virtual, delay=0.26, delays=0.11/0.01/0/0.14, dsn=2.0.0, status=sent (delivered to maildir) Oct 5 16:00:03 s1example postfix/qmgr[10529]: 2E2AD40525BF9: removed Oct 5 16:00:03 s1example postfix/cleanup[9864]: 66AD340525BFA: message-id=<JD20201005160003.9778.sender@example.com> Oct 5 16:00:03 s1example postfix/smtp[9837]: 3E15440525BFD: to=<destination+11@example.com>, relay=mx01.muumuu-mail.com[123.4.567.8]:25, conn_use=3, delay=0.29, delays=0.12/0/0.01/0.17, dsn=2.0.0, status=sent (250 Queued! <JD20201005160003.9778.sender@example.com> (Queue-Id: 71DC341004F6)) Oct 5 16:00:03 s1example postfix/qmgr[10529]: 3E15440525BFD: removed Oct 5 16:00:03 s1example postfix/qmgr[10529]: 66AD340525BFA: from=<return@example.com>, size=535, nrcpt=1 (queue active) Oct 5 16:00:03 s1example postfix/pickup[5790]: 7F0B040525BF9: uid=1001 from=<return@example.com> Oct 5 16:00:03 s1example postfix/cleanup[9830]: 7F0B040525BF9: message-id=<JD20201005160003.9778.sender@example.com> Oct 5 16:00:03 s1example postfix/qmgr[10529]: 7F0B040525BF9: from=<return@example.com>, size=535, nrcpt=1 (queue active) Oct 5 16:00:03 s1example postfix/pickup[5790]: 997BF40525BFC: uid=1001 from=<return@example.com> Oct 5 16:00:03 s1example postfix/cleanup[9864]: 997BF40525BFC: message-id=<JD20201005160003.9778.sender@example.com>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/10/08 11:34

基本的にボトルネックになっている部分を見つけて、その部分のパラメータを調整することになります。 まず、処理に時間がかかっているのは、どの部分でしょうか?
teratailmacr2

2020/10/08 11:37

ご回答ありがとうございます。 処理毎の時間はどうすれば確認出来ますでしょうか?
scsi

2020/10/08 22:58

maillogにもどの処理で何秒かかったか出力されてますね。
teratailmacr2

2020/10/09 03:46

ご回答ありがとうございます。 maillogを追加しました。(文字数制限の関係上一部だけとなります) こちらで何かわかりますでしょうか?
scsi

2020/10/09 07:54

下記を見ると 0.29 秒で1通送信できてますが、これが遅いのですか?早いのですか?期待する速度は1通どの程度なのでしょう? delay=0.29, delays=0.12/0/0.01/0.17 25port へ接続するのに 0.77 秒かかってるパターンもありますね。 delay=1.1, delays=0.17/0.02/0.77/0.15 っていうのがログからわかります。
scsi

2020/10/09 07:56

> 処理能力的にはまだまだ余裕があると思うのですが、どの設定項目を変更すれば早く処理出来る様になりますでしょうか? ↑は何を確認してそういう判断に至ったのでしょうか?
teratailmacr2

2020/10/10 01:38

一万通五分がとりあえずの目標ですので、0.03秒でコマンドの実行結果を得て次のコマンド処理に移っていないと間に合わない計算になります。 コマンド実行がqmailよりもpostfixの方が遅いと言う事でしょうか。 処理能力は旧サーバとの比較になります。 旧サーバは何をするにもかなりモッサリしていたのですが、それが新サーバでは爆速になっている事から、旧サーバ以上のポテンシャルは持っていると思っています。
CHERRY

2020/10/10 05:04 編集

通信相手があることなので、おそらくqmail でも1通 0.03 秒で送信は難しいと思います。 並列数を増やすことで対処しているのだと思います。 qmail は、相手に関係なく複数並列でひたすら送信する仕様だったと思いますので、Postfix は、MXホスト別にコネクションを張っていたと思うので送信方法の設計が違うのだと思います。 ひたすら送信する必要があるのであれば、従来と同じように qmail の利用を検討するのはいいのではないでしょうか。
teratailmacr2

2020/10/11 03:34

ご回答ありがとうございます。 MTAの設計違いの結果なのですね。 qmail恐るべし。。。
guest

回答2

0

ベストアンサー

メールクライアントから Postfix への「入り口」の速度が遅いということでしょうか?

Postfix Architecture Overview

sendmail コマンドでメールを送信する場合、maildrop キューに保存された後、pickup コマンドでキューからメールを取り出して処理するのですが、この pickup コマンドがボトルネックになっているのかもしれません。
sendmail コマンドではなく、SMTP 接続にして、smtpd プロセスで受けた方が並列化ができそうです。

「入り口」の性能テストするのであれば、外部への送信の影響を除くため、/etc/aliases で /dev/null に転送する(捨てる)アカウントを作成し、そのアカウント宛にプログラムから送信するといいと思います。

私の経験では、「入り口」のボトルネックは、受けるプロセスで limit がかかっていなければ、ディスク書き込み(キューの書き込み)がほとんどですので、ブロックI/O やロードアベレージを見るといいと思います。
ロードアベレージが低ければ、まだ「入り口」で受け入れる能力はあるかと。

また、プログラム側でも、直列(コマンド実行の戻りを待って次を実行)ではなく、並列にすることも検討するといいと思います。

投稿2020/10/10 11:57

TaichiYanagiya

総合スコア12173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratailmacr2

2020/10/11 03:48

ご回答ありがとうございます。 my $SMTP = Net::SMTP->new('127.0.0.1', Port=>'', DEBUG=>1); for (my $i = 1 ; $i <= 1000 ; $i++) { ~メール送信処理~ } $SMTP->quit; Net::SMTPを利用して上記の様にしてみましたが、結果はほとんどかわりませんでした。 送信処理部分を並列化したりバックグランド処理にすればプログラムの終了は高速化出来そうですが、最終的なメール配信時間は変わらなさそうな感じがします。 おっしゃられているように、ディスクI/Oが原因の様な気もします。 とりあえず、次は/dev/null/で試してみます。
TaichiYanagiya

2020/10/11 06:47

手元の仮想マシンで試した限り、sendmail コマンドでも SMTP 接続でも差はなさそうです。
teratailmacr2

2020/10/13 09:42

ご検証ありがとうございます! 恐らくプログラムもサーバスペックも変えずに配信速度を大きく向上させる事は困難だと判断しましたので、一旦これにてクローズとさせていただきます。
TaichiYanagiya

2020/10/13 11:36

うーん、そうですか。 delay=, delays= を見ても、0.4秒/1通 程度なので、普通に捌けると思うのですが。 「入り口」ではなく、「出口」に問題があるのかもしれません。 maillog の smtp プロセスに着目すると、4 PID しかないので、送信先 MTA 側に同時接続数の制限(3〜4?)があるのではないでしょうか。 送信先 MTA が複数になるように、宛先メールアドレスのドメインを複数にして検証するとどうなるでしょうか?
teratailmacr2

2020/10/14 07:50

ご回答ありがとうございます。 ログからその様な事もわかるんですね! 次は宛先ドメインの複数検証も行ってみたいと思います。 何度もアドバイスありがとうございます!
guest

0

default_destination_recipient_limit = 100
default_destination_concurrency_limit = 60

これらを改善してはいかがか?

default_destination_recipient_limit (デフォルト: 50)
メッセージ配送ごとの受信者数の、デフォルトの最大数。これは lmtp(8) や pipe(8)、smtp(8)、virtual(8) 配送エージェントを使った配送のデフォルトの 制限です。

このパラメータの値を1に設定すると、対応する配送先ごとの並列制限は ドメインごとの並列度から受信者ごとの並列度へと意味を変えます。

default_destination_concurrency_limit (デフォルト: 20)
同じ配送先への並列配送の、デフォルトの最大数。これは lmtp(8) や pipe(8)、smtp(8)、virtual(8) 配送エージェントを使った配送のデフォルトの 制限です。

http://www.postfix-jp.info/trans-2.1/jhtml/postconf.5.html

的を射ていれば良いのですが・・・

投稿2020/10/10 10:18

hana_yama_san

総合スコア923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratailmacr2

2020/10/11 03:38

ご回答ありがとうございます。 上記パラメータは何度かいじってみた結果の最終設定値となります。 いろいろ試してみたのですが、結果が全く変わらなかった為、これらの設定以外の問題ではないかと考えています。 いくら増やしても変わらないので、sendailコマンドの処理速度の限界かと感じています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問