PHP-Ubuntu 名称解析暂时失败

PHP-Ubuntu 名称解析暂时失败

我经常收到这个错误:

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

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

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

答案1

考虑到以下细节:

  1. 每天有数百万个请求
  2. AWS 上的 Aurora 集群

您可能需要查看您的系统,以确保没有超出DNS 配额为您的帐户。

配额文件中最引人注目的内容之一是:

每个 Amazon EC2 实例都会限制可以发送到 Amazon 提供的 DNS 服务器的数据包数量,以便每秒最多 1024 个数据包每个网络接口。此配额无法增加。Amazon 提供的 DNS 服务器每秒支持的 DNS 查询数因查询类型、响应大小和使用的协议而异。有关可扩展 DNS 架构的更多信息和建议,请参阅适用于 Amazon VPC 的混合云 DNS 解决方案白皮书。

如果达到配额,Amazon Route 53 Resolver 将拒绝流量 [...]

笔记:强调我的。

“每秒最多 1024 个数据包”这一比特很重要,因为实际的每个查询的数据包数量可能有所不同,并且每个 DNS 查询通常有多个数据包。

如果您的服务器每天接收数百万个请求,那么您的服务器很有可能达到该数据包最大值:

  • 1,000,000 个请求/86,400 秒 = 每秒 11.574 个请求
  • 11.574 * 4 个数据包¹ = 每秒 46 个数据包
  • 1024 / 46 = 每秒约 22.26 次 DNS 调用

我不能说这肯定是问题所在,但这是一个很好的开始,特别是当您的网络服务器有定期的高峰期,流量不是以良好、平稳的平均水平运行时。


¹ 过去我曾被这个问题困扰过,我测量过许多 DNS 请求平均每次调用需要 4 个数据包

相关内容