Postfix的性能压测(PHP版)
- 发送测试:分别使用PHP Mail()函数和PHPMailler smtp协议发送邮件, 推送速率是指 发送个数/PHP程序运行时间, 发送速率是指 发送个数/(PHP推送时间+postfix处理积压的时间)
发送方式 | 发送量(个数*进程数) | 推送速率(封/s) | 发送速率(封/s) | 是否积压 |
---|---|---|---|---|
local | 10000*1 | 61.56509558 | 61.56509558 | 否 |
local | 5000*1 | 130.4393196 | 42.50115919 | 积压 |
smtp | 10000*1 | 21.79115444 | 21.79115444 | 否 |
smtp | 5000*2 | 41.86831494 | 41.86831494 | 否 |
smtp | 5000*3 | 55.7815742 | 55.7815742 | 否 |
smtp | 5000*4 | 64.46328991 | 64.46328991 | 否 |
- 注:local方式是使用本机postfix发送邮件(使用PHP的mail()函数,需要配置PHP.ini,直接从本机发送邮件),smtp是其他机器连接以后postfix根据配置进行接受、转送(使用PHPmailer, 使用smtp协议发送)。
- 积压测试: 在不推送新的邮件请求的情况下, postfix自身发送积压的邮件所需时间, local方式需要maildrop->incoming->active之后发送, smtp方式需要用smtpd进程接收到->incoming队列->active之后发送。
发送方式 | 积压个数 | 发送速率(封/s) |
---|---|---|
local | 10008 | 7.890513328 |
local | 5008 | 11.67511932 |
local | 2509 | 16.58659537 |
local | 1007 | 60.26456179 |
local | 509 | 59.08871629 |
local | 108 | 104.3172932 |
smtp | 10008 | 10.32851814 |
smtp | 5008 | 40.03314741 |
smtp | 2511 | 43.09662048 |
smtp | 1005 | 51.99071758 |
smtp | 507 | 52.73113486 |
smtp | 108 | 49.64010573 |
- 结论
- PHP使用smtp单进程推送(当前线上使用的模式),没有达到postfix的最大发送能力(即推送速度<发送速度), 这种模式下发送能力为21封/s。
- 使用本地PHP mail函数(需要配置php.ini)可以提高推送的速度,减轻PHP程序的压力,但是只能与本机的postfix交互。
- 队列积压越多,发送越慢, 积压>1000时, 速度明显变慢, <1000影响不大。
- 对于邮件发送来说速度是一个动态的概念, 比如软退多时, incoming队列的处理时间会相应变慢,判断推送速度是否过快的标准,应该以队列长度为准, 队列达到某个值比如1000(现在线上的值是500),则不再推送,否则会影响postxfix本身处理的速度。