报错php_network_getaddresses
09 January 2019
背景
最近有个业务,服务器正常,但有部分用户打开出现以下报错!
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
网上查一波资料后,得到的结果是【php无法连接mysql实例】,但一直我们都是用阿里云的,服务器和rds.之前都是正常的,心想难道升级了,有影响。于是,开始提工单。
提工单
1.阿里云工程师结出的建议是让我参考以下方式,先检查下:
https://help.aliyun.com/knowledge_detail/96028.html
2.第一次,检查DNS是否是否是按文档里设置
cat /etc/resolv.conf
但按上面的设置修改了,但是还是出现刚才那个问题。
2.第二次,检查系统日志
tail -f /var/log/messages
发现里面有很多的kernel: TCP: time wait bucket table overflowt
解决方案
参考资料
https://help.aliyun.com/knowledge_detail/43225.html
注意修改配置后需要执行sysctl -p 使配置生效
操作步骤
阿里云工程师 : 这个不是根据CPU来的,建议:
1. 执行命令 netstat -anp |grep tcp |wc -l统计 TCP 连接数。
2. 对比 /etc/sysctl.conf 配置文件的 net.ipv4.tcp_max_tw_buckets 最大值,看是否有超出情况。
3. 执行命令 vi /etc/sysctl.conf,查询 net.ipv4.tcp_max_tw_buckets 参数。如果确认连接使用很高,容易超出限制。
4. 根据实际情况适当调高参数 net.ipv4.tcp_max_tw_buckets,扩大限制。
5. 执行命令 # sysctl -p 使配置生效。
完全解决
工程师 XXX 号 :
1.我看到还有OOM的情况,建议确认下是不是业务量增加了,内存不够使用了
2.当前值已经到了23980,您调整15000自然是没有效果的,建议直接设置为65535