腾讯云下wordpress发邮件慢的一个解决方法
又遇到一个无关痛痒的问题,wordpress自带的新评论邮件通知挺好用的,之前一直在用。搬家到腾讯云之后发现问题了。
当开启“发送电子邮件通知我: ”这个选项时,新评论的提交速度那叫一个慢啊,估摸着得有10秒左右。
第一反应是smtp连接速度过慢导致的,排查postfix日志,没有发现问题
后来想到php-fpm有记录慢日志的功能,宝塔面板也可以很方便的查看慢日志
可是宝塔默认设置的慢日志阈值是30秒,上边我遇到的问题也就10秒左右,日志可能记录不到,所以先修改一下宝塔面板慢日志的记录阈值
打开/www/server/php/72/etc/php-fpm.conf,将request_slowlog_timeout值修改为5
request_slowlog_timeout = 5
保存文件,重启php生效
接下来就是再次模拟一下提交新评论,经历10秒的等待,提交成功。回到宝塔看一下php的慢日志记录
可看到已经记录到了模拟提交评论时执行的文件及其相关的函数。一般来说wordpress的自定义函数只要数据库没什么问题,基本也就不存在问题
所以得从php的预置函数上下手,首先看到的就是上图红框处的 gethostbyaddr() 函数
gethostbyname — 返回主机名对应的 IPv4地址。
为了测试这个函数是否导致了延迟发生,索性又写了一个简单的测试文件
<?php
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
echo $hostname;
?>
执行的时候发现即便是简单的测试脚本,也是很慢,而且慢日志也记录到了这一次测试
所以基本确定是这个函数执行过慢,导致后续提交评论的操作延迟
然后接着就是一通瞎忙活……期间惨痛经历和无功而返不再记录。
临时解决方法:
宝塔面板里禁用 gethostbyaddr 函数,保存重启php,再次模拟提交新评论,诶我去,没有延迟了也不慢了。
所以,这个问题还是没有根本性的解决,未知的原因。
先立个flag吧,指不定哪天就知道原因了。
6 条评论
知道是什么原因了吗?
@我也遇到了
还是未知,立了flag之后就没仔细研究了
@Bug侠
禁用这个函数会有什么不好的影响吗?
@我也遇到了
我这没有影响,这个函数只是解析IP对应的主机名的,如果禁用则在使用这个函数的时候会返回主机名,不解析
所以说这个评论邮件系统总是需要折腾,你看我当初,搞了半天是服务器连不通QQMail
@jevin
你那个很明确是服务器的问题,我这个还不确定,不过我估计多半也是腾讯云的问题。唉,再排查。一时半会不知道为啥。