腾讯云下wordpress发邮件慢的一个解决方法

PHP, 折腾 2018/03/21

又遇到一个无关痛痒的问题,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条评论

    • Bug侠 评论于 回复

      @我也遇到了
      还是未知,立了flag之后就没仔细研究了 :笑哭:

      • 我也遇到了 评论于 回复

        @Bug侠
        禁用这个函数会有什么不好的影响吗?

        • Bug侠 评论于 回复

          @我也遇到了
          我这没有影响,这个函数只是解析IP对应的主机名的,如果禁用则在使用这个函数的时候会返回主机名,不解析

  • jevin 评论于 回复

    所以说这个评论邮件系统总是需要折腾,你看我当初,搞了半天是服务器连不通QQMail :二哈:

    • Bug侠 评论于 回复

      @jevin
      你那个很明确是服务器的问题,我这个还不确定,不过我估计多半也是腾讯云的问题。唉,再排查。一时半会不知道为啥。 :笑哭:

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)关闭回复