连接失败:php\u网络\u getaddresses:getaddrinfo失败:系统错误

连接失败:php\u网络\u getaddresses:getaddrinfo失败:系统错误,php,nginx,Php,Nginx,连接失败:php\u网络\u getaddresses:getaddrinfo失败:系统 错误 “系统错误”部分真的让我很反感 我已经和这个错误斗争了几个月,它是非常零星的。它似乎来自我的数据库连接器 重新启动php-fpm似乎可以缓解该问题约24小时,直到它再次出现故障。我原以为它可能是用php-fpm攻击max-children,但在检查php-fpm状态后,它不是 我已经尝试将错误与应用程序的syslog和nginx错误日志关联起来,我已经没有想法了。关于如何解决这个问题有什么想法吗?这个

连接失败:php\u网络\u getaddresses:getaddrinfo失败:系统 错误

“系统错误”
部分真的让我很反感

我已经和这个错误斗争了几个月,它是非常零星的。它似乎来自我的数据库连接器

重新启动
php-fpm
似乎可以缓解该问题约24小时,直到它再次出现故障。我原以为它可能是用
php-fpm
攻击max-children,但在检查
php-fpm
状态后,它不是


我已经尝试将错误与应用程序的
syslog
nginx
错误日志关联起来,我已经没有想法了。关于如何解决这个问题有什么想法吗?

这个问题突然出现在我们面前,令人困惑,因为它与Redis的连接有关

我知道Redis不是问题所在,我觉得奇怪的是,正如你提到的,我们得到了“系统错误”部分

我很快就找到了php fpm源代码,看看是什么导致了这个错误,并发现它与DNS查找有关(很明显)-但是如果我在/etc/hosts中有“127.0.0.1 localhost”,为什么会有问题呢

在进一步挖掘之后,我发现它与文件描述符和不持久的连接有关

我会确保你的php fpm孩子们正在优雅地死去,这样连接就可以被回收。我在/etc/sysctl.conf中还有net.ipv4.tcp_tw_recycle=0,这似乎导致了一些问题


简言之,检查lsof以查看谁占用了文件描述符,如果您还没有增加它们,您可能会增加它们

经过一些挖掘,我认为我们的问题是我们的配置没有设置max_请求,孩子们从来没有回收。我们确实设置了进程空闲超时,但我们在cron上运行了一些脚本,使进程保持活动状态

因此,如果对其他人来说:

//它在回收流程之前处理的请求量

pm.max_requests = 500;
//作为空闲进程的最大活动时间

pm.process_idle_timeout = 10s;

Brandon,感谢您的回复,我相信这与php fpm儿童由于我们的错误配置而没有回收自己有直接关系。我已经发布了一个答案,希望能帮助其他人。