我们看到一个非常奇怪的问题,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中有解决问题,我们这样做了!
在完全失去的时候 - 谷歌搜索已经很少了。即使指出我们可能开始调查的地方,也会非常感激。
感谢。
答案 0 :(得分:0)
我首先要看看您的DNS解析位置,服务器上当前指向的DNS在哪里?也许尝试将其更改为其中一个公共DNS服务器(8.8.8.8或4.2.2.2),看看是否遇到同样的问题。