0

我们看到一个非常奇怪的问题,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 完全亏损 - 谷歌搜索很少出现。甚至我们可能会在哪里开始调查的指针将不胜感激。

谢谢。

4

1 回答 1

0

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

于 2013-02-06T17:36:56.500 回答