メール送信速度 - 改善方法

メール送信速度 - 改善方法

私は電子メールを送信するためのサーバーを維持しています (もちろんスパムではありません)。このマシンの現在の速度は、1 時間あたり約 2000 通の電子メールです。

編集: 実は今日、テストメール送信をしました。スロットリングを解除して、最近アクティブになった 2500 人以上の購読者にメールを送信しました。メールを送信するのに約 1 時間 45 分かかりました。

上司は、Mail Chimp などの会社では数秒または数分以内に何千ものメールを送信できるのを見て、それには満足していないと指摘しました。もちろん、メールはすぐに返信や開封などを受けるので、送信されます。

私の質問は、このような送信速度を達成するには具体的に何が必要なのかということです。もちろん、ハードウェアを追加して、メールなどを送信するサーバーのより複雑なシステムを構築することもできます。そしてもちろん、クリーンなリスト(サーバーのリソースを消費する未知のホストなどがない)を持つことも重要です。

しかし、それ以外にも、これを改善する方法は他にもあるはずです。これについて概要を教えていただける方はいらっしゃいますか?

編集

コメントでリクエストされたとおり、使用されているハードウェアと送信動作に関する詳細は次のとおりです。

サーバーの種類

Operating system: CentOS Linux 5.11
Kernel and CPU: Linux 2.6.18-400.1.1.el5 on i686
Processor: Intel Core2 Duo CPU E7500 @ 2.93GHz, 2 cores
CPU load averages: 1.07 (1 min) 1.18 (5 mins) 0.65 (15 mins)
CPU usage: 4% user, 1% kernel, 56% IO, 38% idle
Real memory: 1.49 GB used, 1.94 GB total
Virtual memory: 1.13 GB used, 3.91 GB total
Local disk space: 55.10 GB used, 219.71 GB total

インド

Postfix version 2.3.3

メールの平均サイズ

Of the recent mailings, the largest one I found was just below 20k.
On average I can say it's probably between 8k and 10k per message.

利用可能な帯域幅

30Mbit/s symmetrical

ディスク速度

hdparm -t /dev/sda

    /dev/sda:
     Timing buffered disk reads:  336 MB in  3.01 seconds = 111.64 MB/sec

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync

    16384+0 records in
    16384+0 records out
    1073741824 bytes (1.1 GB) copied, 23.9512 seconds, 44.8 MB/s

さまざまな指標の測定

CPU load - see above

disk time - ???

RAM usage - see above

bandwidth usage - below data from "iftop -n" over a time period of ca. 5 minutes while sending mail.

    TX:      cum:  3.43MB   peak:  1.16Mb    rates:   5.36Kb  99.5Kb   137Kb
    RX:            1.01MB           120Kb             2.06Kb  38.0Kb  32.3Kb
    TOTAL:         4.44MB          1.28Mb             7.42Kb   137Kb   169Kb

メールログデータの一部:

in case this is of value, here are a couple of lines from the maillog:

Mar  4 14:00:32 mailserver postfix/smtp[25768]: 6C419107802A: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.6, delays=0.05/0/0.14/1.4, dsn=2.0.0, status=sent (250 OK id=1YT8ud-0004fe-Rn)
Mar  4 14:00:32 mailserver postfix/qmgr[2806]: 6C419107802A: removed
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup (score_sender), 1 matches for "[email protected]", results: "."=>[Amavis::Lookup::RE=ARRAY(0xaa7f358),HASH(0xac5f891)]
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_re("[email protected]"), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) query_keys: [email protected], myself@, mailserver.com, .mailserver.com, .com, .
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_hash([email protected]), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup (score_sender<[email protected]>) => undef, "[email protected]" does not match
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) SpamControl: calling spam scanner
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) spam_scan: DSPAM not available, skipping it
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) timer set to 320 s for SA (was 480 s)
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) calling SA parse, SA version 3.2.5
Mar  4 14:00:33 mailserver amavis[26392]: (26392-01-46) CALLING SA check
Mar  4 14:00:33 mailserver postfix/smtp[25767]: A5341207802D: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.7, delays=0.15/0/0.14/1.4, dsn=2.0.0, status=sent (250 OK id=1YT8ue-0005BY-5x)
Mar  4 14:00:33 mailserver postfix/qmgr[2806]: A5341107802D: removed
Mar  4 14:00:34 mailserver postfix/smtp[25764]: C30371078144: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.8, delays=0.05/0/0.13/1.6, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued on mx.example.com as 1425474034-NECyl5JAc9-0Xx8wjwN)

答え1

私自身、Postfix サーバーでメーリング リストを運用していますが、コーヒーを一杯淹れ終わるまでに 2,000 件のメッセージが少なくとも 1 回は処理される (つまり、延期される可能性がある) ことが予想されます。

お使いのシステムはスパムとウイルススキャンを実行しているようです発信するメール。受信メールをスキャンするのは良い考えですが、送信メールをスキャンするのはあまり良い考えではありません。特に、そのメールの送信元がすでに適切に管理されている場合はなおさらです。これにより、各メッセージの配信に数秒余計にかかることになり、ディスク I/O も大幅に増加することが分かります。

送信メールのスキャンを停止するように Postfix を再設定します。オフィスのユーザーが自分のコンピューターからメールを送信する場合など、送信メールを通常どおりスキャンする必要がある場合は、送信メーリング リスト トラフィックを処理するための専用メール サーバーをセットアップします。

答え2

問題は、CPU 待機時間が長いことからわかるように、I/O 速度にあります。これには 2 つの要因が考えられます。

  1. postfix キュー管理は fsync() を多用し、IOPS の観点で大きな負荷をかけます。
    これを試して:postfix のキューをホストするファイルシステム (通常はルートファイルシステム) を "-o nobarrier" マウントオプションで再マウントします。警告: I/O バリアを無効にすると、停電や OS クラッシュの際にデータが失われる可能性があるため、これはテストのみと見なしてください。
  2. 送信メールにもamavis +とspamassassinを実行しているようですこれは良いことかもしれませんが (環境とその要件によって異なります)、spamassassin は電子メールのスループットを大幅に低下させる可能性があります。
    これを試して:amavisd.conf で、$sa_local_tests_only = 1ネットワークに依存するすべてのテストを除外し、$sa_mail_body_size_limit = 32*1024spamassassin によってスキャンされる本体部分を減らすように設定します。

上記の提案を 1 つずつ試し、そのたびにシステムのベンチマークを実施してください。その後、結果をお知らせください。

答え3

こんにちは、postfixは必要ありません!!!!

(C++、C# .NetCore、またはJava)からメールを送信するためのマルチスレッドアプリケーションを作成する必要があります。

  • ニュースレターのメールをMySQLデータベースに保存する

  • データベースから各メールアドレスのMXレコードリストを取得します

  • このリストから SMTP サーバー (ホスト名) に電子メールを送信します (ポート 25 - 常に)。

その後、1 つの VPS サーバーからアプリを実行し、単一または複数の IP アドレスから送信できるようになります。

または、Postfix から複数の IP アドレスから電子メールを送信することもできます。

C#またはJavaメールSMTPクライアントを使用できます

関連情報