Postfix性能测试,PHP版

Postfix的性能压测(PHP版)

  • 发送测试:分别使用PHP Mail()函数和PHPMailler smtp协议发送邮件, 推送速率是指 发送个数/PHP程序运行时间, 发送速率是指 发送个数/(PHP推送时间+postfix处理积压的时间)
发送方式发送量(个数*进程数)推送速率(封/s)发送速率(封/s)是否积压
local10000*161.5650955861.56509558
local5000*1130.439319642.50115919积压
smtp10000*121.7911544421.79115444
smtp5000*241.8683149441.86831494
smtp5000*355.781574255.7815742
smtp5000*464.4632899164.46328991
  • 注:local方式是使用本机postfix发送邮件(使用PHP的mail()函数,需要配置PHP.ini,直接从本机发送邮件),smtp是其他机器连接以后postfix根据配置进行接受、转送(使用PHPmailer, 使用smtp协议发送)。
  • 积压测试: 在不推送新的邮件请求的情况下, postfix自身发送积压的邮件所需时间, local方式需要maildrop->incoming->active之后发送, smtp方式需要用smtpd进程接收到->incoming队列->active之后发送。
发送方式积压个数发送速率(封/s)
local100087.890513328
local500811.67511932
local250916.58659537
local100760.26456179
local50959.08871629
local108104.3172932
smtp1000810.32851814
smtp500840.03314741
smtp251143.09662048
smtp100551.99071758
smtp50752.73113486
smtp10849.64010573
  • 结论
    • PHP使用smtp单进程推送(当前线上使用的模式),没有达到postfix的最大发送能力(即推送速度<发送速度), 这种模式下发送能力为21封/s。
    • 使用本地PHP mail函数(需要配置php.ini)可以提高推送的速度,减轻PHP程序的压力,但是只能与本机的postfix交互。
    • 队列积压越多,发送越慢, 积压>1000时, 速度明显变慢, <1000影响不大。
    • 对于邮件发送来说速度是一个动态的概念, 比如软退多时, incoming队列的处理时间会相应变慢,判断推送速度是否过快的标准,应该以队列长度为准, 队列达到某个值比如1000(现在线上的值是500),则不再推送,否则会影响postxfix本身处理的速度。