美文网首页
php间歇性连接不上redis和mysql问题

php间歇性连接不上redis和mysql问题

作者: hualinux | 来源:发表于2019-08-05 19:29 被阅读0次

    问题

    最近上线了一台之前的服务器拿来做php,然后把php的版本,拓展包全部和线上的版本保持了一致,为了以防万一把nginx的和php的配置文件,以及版本也全部高度一致,文件描述符和进程数也调整到了565535和10240,结果还是出了问题,请求略微多一些的时候很多php报错日志:

    [22-Oct-2018 07:01:54 Asia/Shanghai] PHP Fatal error: Uncaught RedisException: Connection closed in /data/wwwroot/www.test.com/config/config.ini.php:3

    [22-Oct-2018 07:01:58 Asia/Shanghai] Db Error: database connect failed. error info :Connection timed out. db config:array (等

    分析

    1、首次怀疑是php拓展包的原因,因为之前也有拓展包和软件版本不兼容的情况也是这个报错。于是2、对比phpinfo信息,各个拓展的版本,以及配置文件,发现完全一致。

    3、接下来怀疑是类和参数,cat /etc/sysctl.conf进行对比,发现一致。

    4、然后不死心的重新安装了所有拓展包!问题依旧存在。

    5、然后开始怀疑是不上tcp端口数不够用。于是开始用ss进程每分钟检测,发现完全够用

    6、之后没有办法了,去查系统日志message,终于在相同的时间点发现问题:kernel: nf_conntrack: table full, dropping packet.很多这个报错,终于找到了,查了下发现是内核参数net.nf_conntrack_max设置太小的问题。

    原因

    服务器访问量大,内核netfilter模块conntrack相关参数配置不合理,导致新连接被drop掉。防火墙相关的参数

    解决

    修改内核配置:vim /etc/sysctl.conf

    net.netfilter.nf_conntrack_max=1048576

    net.nf_conntrack_max=1048576

    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

    net.netfilter.nf_conntrack_tcp_timeout_established = 3600

    使它生效sysctl -p,目前持续观察中

    总结

    检查内核的时候可能不是每个内核参数都有配置,对比的时候可以sysctl -a,以及多查看系统日志,有时候就是能发现原因。

    相关文章

      网友评论

          本文标题:php间歇性连接不上redis和mysql问题

          本文链接:https://www.haomeiwen.com/subject/ymdvdctx.html