當佇列已經很大時,我發現 postfix 接受郵件有效能問題,有什麼建議嗎?

當佇列已經很大時,我發現 postfix 接受郵件有效能問題,有什麼建議嗎?

我使用 postfix 為我編寫的郵件系統進行最終投遞。所以這個 postfix 安裝只接受我寄來的郵件,然後退回。當postfix佇列為空時,它可以在5ms左右接受一封郵件。當佇列有 150k-200k 訊息左右時,從我到 postfix 的切換速度非常慢,例如 50-100 有時 500ms。

我記錄了每個 SMTP 會話的時間,這樣我就可以看到時間都花在哪裡了。其中一些是當我等待 RCPT TO 命令的回應時,但絕大多數時間在我發送最後一個點之後、在我收到「250 OK 排隊為...」回應之前消失。

我想也許 RCPT TO 延遲是在 DNS 查找中,但這對我減少排隊時間沒有幫助。我為我發送的所有電子郵件保持一個 TCP 套接字打開,並且我為每封郵件重新設定會話,因此建立和斷開 TCP 連線不會浪費時間,一切都在等待 postfix 將訊息排隊。

我讀到的有關效能調優 postfix 的所有內容都與佇列管理以及為這個或那個網域發送郵件有關。但我首先關心的是讓 postfix 快速接受郵件。

有什麼辦法可以找出 postfix 在這段時間在做什麼,或者有沒有辦法讓它運行得更快? /var/spool/postfix 佇列位於本機磁碟上,因此我無法使其更快。

有什麼建議麼?

答案1

設定以下內容main.cf

hash_queue_depth = 3
hash_queue_names = deferred, defer, incoming, active

這會在傳入佇列和活動佇列中產生子目錄,以便平面目錄不會同時包含所有郵件。它們現在被放入子目錄中。

但請注意:有 150k-200k 封郵件等待投遞,這表明我們對均衡發送郵件的理解存在令人難以置信的錯誤。這對我來說就像垃圾郵件...

答案2

解決方案之一是擁有一個輔助郵件伺服器來處理所有等待發送的退回郵件,這是保持真實電子郵件順利通過的最佳解決方案。

答案3

這是一個非常古老的問題,但技術沒有太大變化/現有的答案不是很有幫助。

當佇列有150k-200k左右的訊息時,從我到postfix的切換速度真的很慢

透過提出這個問題的方式,OP似乎指的是積極的在這裡排隊(Postfix 有多個隊列)。 Postfix 正在做它應該做的事情來防止自己窒息。活動隊列是所有交付調度的巧妙之處。當它變得太大時,調度就成為瓶頸。

當您看到與負載相關的效能問題時,最好檢查負載、CPU 和 IO 指標以查看是否存在硬體瓶頸。

如果您正在操作僅發送中繼,則減少此處的 in_flow_delay 將減少客戶端的限制。但您需要減小活動隊列的大小。限制訊息從傳入佇列傳遞到活動佇列的速率可能會有所幫助。但最好的解決方案是更快地從活動隊列中取出內容。您在這裡可以做的最好的事情是良好的聲譽管理、快速的 DNS,並且如果可能的話,透過多個 IP 位址分配發送。降低重試頻率還有助於提高活動佇列的填充速度,以及根據連線嘗試的頻率限制接受的提供者。

SPF、DMARC 和 DKIM(正確配置)應被視為必不可少的。

因為每個人都發明了自己的處理垃圾郵件的機制,所以總是會有異常值 - 您需要為此設定自訂傳輸。

相關內容