
我正在維護一個伺服器來發送電子郵件(當然沒有垃圾郵件)。這台機器的目前速度約為。每小時 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
MTA
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 條訊息被處理一次(即它們可能會被推遲)。
您的系統似乎正在運行垃圾郵件和病毒掃描外向的郵件。雖然掃描傳入郵件是一個好主意,但掃描傳出郵件可能不是一個好主意,尤其是在郵件來源已良好控制的情況下。我們可以看到,這會增加每個訊息的傳輸時間,並且還會顯著增加磁碟 I/O。
我會重新配置 Postfix 以停止掃描外發郵件。如果您需要正常掃描外寄郵件(例如,辦公室中的人員從其電腦發送郵件),請設定專門的郵件伺服器來專門處理出站郵件清單流量。
答案2
您的問題是 I/O 速度,如 CPU 等待時間較長所示。這可能是由於兩個因素造成的:
- postfix 佇列管理富含 fsync(),並且對 IOPS 施加了沉重的負載。
嘗試這個:使用“-o nobarrier”掛載選項重新掛載承載 postfix 佇列的檔案系統(通常是根檔案系統)。警告:這應僅被視為測試,因為禁用 I/O 屏障可能會在斷電和/或作業系統崩潰時導致資料遺失。 - 看來您正在運行 amavis + 和 spamassassin 來發送電子郵件。雖然這可能是一件好事(取決於環境及其要求),但 spamassassin 可以大大降低您的電子郵件吞吐量。
嘗試這個:在 amavisd.conf 中,設定$sa_local_tests_only = 1
為排除所有依賴網路的測試並$sa_mail_body_size_limit = 32*1024
減少 spamassassin 掃描的正文部分。
一次嘗試上述建議,並每次對您的系統進行基準測試。然後讓我們知道結果。
答案3
嗨,你不需要後綴!
您需要編寫多執行緒應用程式來從(C++、C# .NetCore 或 Java)發送電子郵件
將新聞通訊電子郵件儲存到 mysql 資料庫
從資料庫中取得每個電子郵件地址的 MX 記錄列表
從此清單中向 smtp 伺服器(主機名稱)發送電子郵件(始終在連接埠 25 上)。
然後,您可以執行應用程式並從 VPS 伺服器的單一或多個 IP 位址發送。
或者您可以嘗試從 postfix 從多個 IP 位址發送電子郵件!
您可以使用C#或Java郵件smtp客戶端