![PHP-Ubuntu 名称解析暂时失败](https://linux22.com/image/1024148/PHP-Ubuntu%20%E5%90%8D%E7%A7%B0%E8%A7%A3%E6%9E%90%E6%9A%82%E6%97%B6%E5%A4%B1%E8%B4%A5.png)
我经常收到这个错误:
Severity: Warning --> mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
只有在服务器重启后才能解决此问题。考虑到这种情况发生在每天有数百万个请求的实时服务器上,重启并不是最佳选择。
[已编辑] 我正在使用 Ubuntu 18.04 并连接到 AWS 上的 Aurora 集群,后端代码驻留在 EC2 上
答案1
考虑到以下细节:
- 每天有数百万个请求
- 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 个数据包