【问题标题】:PHP taking a long time to resolve hostnamesPHP 需要很长时间才能解析主机名
【发布时间】:2013-01-22 00:23:08
【问题描述】:

我们看到一个非常奇怪的问题,即 PHP 需要很长时间才能解析任何主机名,该问题每 5-10 次尝试随机发生一次。我们已经使用以下脚本进行了检查...

<?php

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;

$host = "google.com";
echo "looking up ".$host."<br/>";
$ip = gethostbyname($host)
//$ip = rtrim(`/usr/bin/dig $host A +short | /usr/bin/tail -1`);
echo "IP = " . $ip . "<br/>";

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "<br/>Total Time: ".$totaltime." seconds";

?>

查找 google.com 主要需要几毫秒,但每 5-10 次尝试中就有一次需要 10-15 秒!我们看到任何域名都有相同的行为。注释掉的行使用命令行中的 dig 来解决,当使用它时,我们看不到任何问题。这一切都很奇怪,因为他们使用的是同一个解析器。我们已经从命令行运行了这个 PHP 脚本,也将 apache 排除在外 - 结果相同,所以它似乎纯粹是一个 PHP 问题。

PHP 文档说 gethostbyname() 函数最多可能需要 4 秒 - 我们看到的时间要长得多。我们实际上并没有使用这个函数——我们遇到的真正问题是由于无法解析主机名而导致 cURL 调用超时。上面的脚本纯粹是为了评估我们是否在 PHP 中有解决问题,我们这样做了!

atm 完全亏损 - 谷歌搜索很少出现。甚至我们可能会从哪里开始调查的指针将不胜感激。

谢谢。

【问题讨论】:

  • 你对dns_get_record()有同样的问题吗?
  • 是的 - 与 dns_get_record 完全相同的问题 :(
  • 你在服务器的命令行中遇到 curl 的问题吗?

标签: php dns resolve resolver dig


【解决方案1】:

我将首先查看您的 DNS 解析的位置,您的服务器上当前指向的 DNS 是哪里?也许尝试将其更改为公共 DNS 服务器之一(8.8.8.8 或 4.2.2.2),看看您是否遇到同样的问题。

【讨论】:

  • 这是什么服务器?这是共享主机、VPS、物理主机吗?你能观察服务器上的资源,看看是否有一些东西经常占用资源,这会导致正常操作的延迟?当存储被过度使用并且 I/O 无法跟上服务器请求时,我也看到过类似的问题。另外,如果你从命令行得到一个持续的 ping,你会经常遇到延迟吗?
猜你喜欢
  • 2017-08-09
  • 2017-01-30
  • 1970-01-01
  • 2014-08-15
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多