Postfix
限制 Postfix 記憶體
我在 1and1 上有一個類似於此配置的 VPS (512MB,最高可達 2GB)。我執行一個網路服務,我在其中抓取網路並在某個線上數據饋送發生變化時通過電子郵件和簡訊通知我的使用者。
當我發送電子郵件時,我只是讓 PHP 循環遍歷收件人列表並使用 mail() 函式發送電子郵件。每當我嘗試發送大量這些消息時,我的伺服器就會開始表現得很有趣。有時我什至無法執行“ls”,因為 shell 告訴我它“無法分配記憶體”。外殼無法使用,但我的網站執行良好。
Mail.err 包含:
Nov 14 17:30:09 s15351477 postfix/smtp[26000]: fatal: inet_addr_local[getifaddrs]: getifaddrs: Cannot allocate memory Nov 14 17:30:09 s15351477 postfix/sendmail[25999]: fatal: username(1000): unable to execute /usr/sbin/postdrop -r: Success Nov 14 18:29:14 s15351477 postfix/smtp[9911]: fatal: inet_addr_local[getifaddrs]: getifaddrs: Cannot allocate memory Nov 14 18:29:14 s15351477 postfix/sendmail[9910]: fatal: username(1000): unable to execute /usr/sbin/postdrop -r: Success
此外,如果相關,我的 bean 計數器是:
Version: 2.5 uid resource held maxheld barrier limit failcnt 53907331: kmemsize 20779422 21041560 31457280 34603008 2989403 lockedpages 0 0 512 512 0 privvmpages 81488 82498 524288 576716 94640 shmpages 2831 2831 32768 32768 0 dummy 0 0 9223372036854775807 9223372036854775807 0 numproc 90 91 128 128 6603 physpages 32692 33531 2147483647 2147483647 0 vmguarpages 0 0 131072 2147483647 0 oomguarpages 32942 33781 9223372036854775807 2147483647 0 numtcpsock 22 23 720 720 0 numflock 27 28 376 413 0 numpty 1 1 32 32 0 numsiginfo 0 1 512 512 0 tcpsndbuf 425888 441064 3440640 5406720 0 tcprcvbuf 369200 376832 3440640 5406720 0 othersockbuf 268000 268464 2252160 4194304 0 dgramrcvbuf 0 8472 524288 576716 0 numothersock 180 182 720 720 0 dcachesize 952146 966231 5242880 5767168 0 numfile 3609 3683 8192 8192 0 dummy 0 0 0 0 0 dummy 0 0 0 0 0 dummy 0 0 0 0 0 numiptent 25 25 200 205 0
有什麼方法可以限制後綴以防止它像這樣淹沒系統嗎?還想知道:為什麼電子郵件使用這麼多資源,這些電子郵件只是短文本?
Postfix 沒有佔用你的記憶體;即使在一個載入的系統上(每天超過 100k),它也只消耗大約 100MB 的 RSS,電子郵件不斷地通過管道傳輸到外部程序。
記憶豬總是 PHP。除非您使用現代方式來服務它,否則它會快速消耗您的所有記憶體。
大多數 PHP 程式碼也會洩露一些激烈的東西。
減少 main.cf 中每個服務的預設最大並發程序數:
default_process_limit = 10