php_network_getaddresses:getaddrinfo 失败:名称解析暂时失败

php_network_getaddresses:getaddrinfo 失败:名称解析暂时失败

我经常收到这个错误:

Severity: Warning --> mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

只有在服务器重启后才能解决此问题。考虑到这种情况发生在每天有数百万个请求的实时服务器上,重启并不是最佳选择。

[已编辑]

我正在使用 Ubuntu 18.04 并连接到 AWS 上的 Aurora 集群,后端代码驻留在 EC2 上

Askubuntu 上的 @matigo 似乎认为我可能已经达到了极限:

https://askubuntu.com/a/1363447/135086

因此我进行了一些调试,以了解我是否真的达到了 1024 PPS 的限制。幸运的是,有一篇 AWS 文章似乎可以帮助我理解这一点,

https://aws.amazon.com/premiumsupport/knowledge-center/vpc-find-cause-of-failed-dns-queries/

我尝试使用命令来了解我当前遇到的 PPS,并进行监控直到发现错误。

ERROR - 2021-09-20 12:14:31.547863 --> Severity: Warning --> mysqli::real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

令我惊讶的是,以下是 AWS 文章中提到的命令的输出

tcpdump  -r <file_name.pcap> -nn dst port 53 | awk -F " " '{ print $1 }' | cut -d"." -f1 | uniq -c


  2 06:44:22
  6 06:44:24
  4 06:44:26
  2 06:44:28
  4 06:44:30
  7 06:44:34
  2 06:44:38
  7 06:44:39
  9 06:44:44
  6 06:44:46
  4 06:44:49
  6 06:44:50

考虑到时区为 +05:30,IST 12:14:31 的错误应该在 UTC 06:44:31 有一个 dns 条目。

如果我们将平均数据包大小视为每次调用 4 个数据包,参考 @matigo 的回答,我每秒不会达到 22 个 DNS 调用。因此,进一步查看日志,

  4 06:39:06
 26 06:39:09
  4 06:39:10
  2 06:39:13
  6 06:39:16
 16 06:39:17

一些条目已超过每秒 22 次 DNS 调用的限制,但我们没有遇到 php_network_getaddresses 错误。

所以我不确定这里的问题是什么。

有人还说这可能是由于 LAN 中的恶意 DHCP 服务器造成的,不确定如何识别它,或者当唯一配置的 DNS 是 AWS Route53 解析器时,在 EC2 上是否可能出现这种情况。

此刻我很困惑,这是否是 PPS 限制问题还是其他问题。

答案1

我遇到了同样的错误,但实例并未达到限制。一段时间后,我偶然发现一个 AWS 支持线程,指出这可能是硬件问题。

您的实例(i-3d124c6d)的物理底层主机似乎间歇性地出现问题,其中一些问题肯定会导致服务中断。

您能否尝试停止并启动此实例?这样做将导致它在新的底层硬件上启动,然后我们可以利用您的 pingdom 服务来验证是否会出现进一步的问题。

从:https://forums.aws.amazon.com/thread.jspa?threadID=171805

停止并重新启动实例解决了这个问题。

相关内容