php CURL偶尔会降低namelookup_time的速度

时间:2014-02-06 14:18:15

标签: php multithreading curl

我使用CURL从2 API的服务中获取json字符串。每次我有大约20个查询来运行这两个API。 我这样做 - exec() 这意味着我打开40个线程,在每个线程中,都会执行一个卷曲:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, true );
    $contents = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);

大多数情况下,这次运行的速度相当快(所有线程都是1秒),但是在5-6次运行中,在这40个线程中的少数(1-3)中,我遇到了namelookup_time约5秒,通常需要约0.005秒!

另一个令人困惑的问题 - 这个确切的过程在另外两台服务器上运行,并且不会在那里发生(例如 - 所有CURL namelookup_time都非常快)。有问题的服务器是一个生产服务器,但根本不拥挤(这个过程不是一直运行,只是按要求 - 大约每小时20次)

我已经了解curl_multi,但是将代码更改为此格式对我来说很昂贵,而且不止于此 - 我不确定它是否能解决这个问题。

一些可能有帮助的线索 - 在日志中,它看起来像一个一致的延迟,当它发生时比平常花费5秒钟,所以也许在某处有一些等待的定义?

任何人都有方向吗?

0 个答案:

没有答案