限制 Postfix 内存

限制 Postfix 内存

我在 1and1 上有一个类似这样的 VPS配置(512MB,最高可达 2GB)。我运行一个网络服务,在其中抓取网络数据,当某个在线数据反馈发生变化时,通过电子邮件和短信通知我的用户。

当我发送电子邮件时,我只需让 PHP 循环遍历收件人列表并使用 mail() 函数发送电子邮件即可。每当我尝试发送大量此类消息时,我的服务器就会开始出现异常。有时我甚至无法运行“ls”,因为 shell 告诉我“无法分配内存”。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

另外,如果相关的话,我的会计人员是:

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 以防止它像这样淹没系统?还想知道:为什么电子邮件会占用这么多资源,这些电子邮件只是短文本?

答案1

Postfix 不使用您的内存;即使在负载系统(每天 >100k)下,它也仅消耗大约 100MB RSS,并且电子邮件会不断传送到外部进程。

理论上最耗内存的肯定是 PHP;除非你使用现代方式来使用它,否则它会很快消耗掉你所有的内存。

大多数 PHP 代码也会泄露一些严重的东西。

答案2

减少main.cf中每个服务的默认最大并发进程数:

default_process_limit = 10

相关内容