main.cf 中清單的 postfix 效能

main.cf 中清單的 postfix 效能

要定義一個項目列表以指派給 postfix 中的許多不同選項,您可以使用逗號分隔的列表,如下所示:

relay_domains = example.com,example.net,example.org

或像這樣的哈希映射:

relay_domains = hash:/etc/postfix/relay_domains

然後使用 postmap 將鍵、值項的檔案轉換為 bdb 檔案。

我的問題是:使用哈希映射而不是僅僅指定列表是否有任何性能原因?

答案1

我沒有數據或指標來確定性能在這兩種情況下是否重要。我將嘗試解釋涉及這兩個案例的後台流程。

當 postfix 守護程式運行時,這兩者之間幾乎沒有什麼區別,因為:

  • 使用時main.cf,postfix 解析設定文件,將其儲存到記憶體中,並且在 postfix 重新啟動或管理員發出命令之前不會再次檢查該檔案postfix reload
  • 當使用雜湊表時,postfix 解析該表,將其儲存到記憶體中並定期檢查檔案是否已變更。如果資料庫發生更改,postfix 將在處理下一個客戶端請求之前終止,以便新進程可以使用新資料庫進行初始化。來源

現在,如果您想更改列表,那麼

  • 更改後main.cf,您應該調用postfix reload.它將強制主守護程序重新讀取設定檔並終止子進程,以便它可以獲得新的配置。來源
  • 更改哈希表後,無需呼叫postfix reload

postfix reload我仍然不明白(1)透過手動呼叫重新啟動子進程和(2)由哈希表觸發的重新啟動子進程已被修改之間的區別。

讀完後有一些知識postfix 手冊頁,特別是在守護程式部分。這幫助我理解(1)透過手動呼叫重新啟動子進程postfix reload和(2)透過修改雜湊表觸發重新啟動子進程之間的差異。

Postfix 的主程序稱為掌握。它是第一次調用並作為“主”程式。它按需調用其他守護進程,例如 smtpd、qmgr、trivial-rewrite。

有四種 postfix 守護程式

  1. 該守護程式不會死亡,因此它不會自動取得 main.cf 的變更。配置更改後呼叫postfix reload將使進程重新讀取它。這包括:掌握
  2. 此守護程序成為持久進程,因此它不會自動擷取對 main.cf 的變更。配置更改後呼叫postfix reload將使進程重新讀取它。這包括:qmgr,tlsmgr,核實
  3. 長時間運行的進程可以運行一小時或幾個小時。配置更改後呼叫postfix reload將加快配置更改速度。這包括:簡單重寫,撿起,後螢幕,代理映射
  4. 只運行有限時間的短運行進程。不需要調用postfix reload,因為進程再次運行時會重新讀取 main.cf。這包括郵件傳輸協定,郵件發送,當地的以及除上述三類之外的其他過程。

如果您用於main.cf存儲列表但不調用postfix reload,那麼

  • 由於壽命較短,守護程式類別 4 將在進程恢復後立即拾取它。
  • 守護程式類別 3 需要一些時間才能生效
  • 守護程式類別 1 和 2 永遠不會重新讀取,main.cf直到您呼叫postfix reload

當您使用哈希表來存儲列表並且您對postmap文件進行 -ed 時,那麼

  • 守護程式類別 2、3、4 將偵測檔案變更。所以不需要做 postfix 重新載入。
  • 守護程式類別 1 沒有哈希類型參數值。所以,它對 master daemon 沒有影響。

結論

否則,看起來上述兩種情況之間的性能差異很小。如果您很少更改表格,那麼差異可以忽略不計。例外的是,如果您頻繁地執行或更改哈希表,那麼在過程postfix reload中就會出現效能問題。qmgr這裡這裡

更多資訊:Postfix 效能自述文件

相關內容