【问题标题】:Connect failed: php_network_getaddresses: getaddrinfo failed: System error连接失败:php_network_getaddresses:getaddrinfo 失败:系统错误
【发布时间】:2017-12-07 15:56:53
【问题描述】:

连接失败:php_network_getaddresses:getaddrinfo 失败:系统 错误

"System error" 部分真的让我很反感。

几个月来我一直在与这个错误作斗争,这是非常零星的。它似乎来自我的数据库连接器。

重新启动 php-fpm 似乎可以在大约 24 小时内缓解该问题,直到它再次开始出现问题。我原以为php-fpm 可能会击中最大的孩子,但在检查php-fpm 状态后,它不是。

我已尝试将错误与应用程序的 syslognginx 错误日志相关联,但我的想法已经不多了。有关如何解决此问题的任何想法?

【问题讨论】:

    标签: php nginx


    【解决方案1】:

    经过一番挖掘,我认为我们的问题是我们的配置没有设置 max_requests,孩子们从来没有回收过。我们确实设置了 process_idle_timeout,但是我们在 cron 上运行了一些脚本来保持进程处于活动状态。

    所以如果其他人:

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

    pm.max_requests = 500;
    

    // 作为空闲进程的最大存活时间

    pm.process_idle_timeout = 10s;
    

    【讨论】:

      【解决方案2】:

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

      我知道 Redis 不是问题所在,但正如您所说,我们得到了“系统错误”部分,这很奇怪

      我很快就深入了解了 php-fpm 源代码,以查看是什么引发了该错误,并发现它与 DNS 查找有关(显然) - 但是如果我有 '127.0.0.1 localhost' 为什么会出现问题/etc/hosts?

      在深入挖掘后,我发现它与文件描述符和非持久连接有关。

      我会确保你的 php-fpm 子进程优雅地死去,以便可以回收连接。我在 /etc/sysctl.conf 中也有 net.ipv4.tcp_tw_recycle=0 似乎会导致问题。

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

      【讨论】:

      • Brandon,感谢您的回复,我认为这与我们的错误配置导致 php-fpm 孩子没有自行回收直接相关。我已经发布了一个答案,希望能帮助其他人。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      相关资源
      最近更新 更多