【问题标题】:Bad performance in the cURL call on the same server同一服务器上的 cURL 调用性能不佳
【发布时间】:2017-08-07 09:03:35
【问题描述】:

为什么在同一服务器上调用 cURL 时只有少数并发会导致阻塞

示例

phpdebug.com

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "http://phpdebug2.com",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

phpdebug2.com

<?php
echo "application2";

Apache ab 测试结果

ab -n 10 -c 2 http://phpdebug.com/

Requests per second:    198.93 [#/sec] (mean) 
Time per request:       10.054 [ms] (mean) 
Time per request:       5.027 [ms] (mean, across all concurrent requests) 
Transfer rate:          33.80 [Kbytes/sec] received

ab -n 10 -c 3 http://phpdebug.com/

Requests per second:    60.42 [#/sec] (mean)
Time per request:       49.648 [ms] (mean)
Time per request:       16.550 [ms] (mean, across all concurrent requests)
Transfer rate:          10.27 [Kbytes/sec] received

ab -n 10 -c 4 http://phpdebug.com/

Requests per second:    17.68 [#/sec] (mean)
Time per request:       226.226 [ms] (mean)
Time per request:       56.557 [ms] (mean, across all concurrent requests)
Transfer rate:          3.00 [Kbytes/sec] received

ab -n 10 -c 5 http://phpdebug.com/

Benchmarking phpdebug.com (be patient)...apr_pollset_poll: The timeout specified has expired (70007)
  1. 为什么每秒请求数下降如此之快?
  2. cURL在同一台服务器上调用时如何优化这种情况?

【问题讨论】:

  • 想知道这不是更好地放在codereview.stackexchange.com 吗?不确定。
  • 运行 TOP 时会发生什么?
  • @NevilleK 像往常一样,几秒钟内显示几个 php-fpm。
  • 您能看到两台服务器中的哪一台在消耗资源吗? phpdebug 还是 phpdebug2?
  • @NevilleK 抱歉,我无法区分它们。

标签: php performance curl


【解决方案1】:

关于这个问题的几个想法:

  1. 是否包含其他文件以避免 cUrl 请求?您也可以通过其他方式传递数据,例如通过数据库。
  2. 看起来CURLOPT_MAXREDIRS 不需要在那里,您在同一台服务器上运行,对吗?
  3. 我还建议将CURLOPT_TIMEOUT 降低大约脚本运行时间,因为没有网络(或几乎没有网络)延迟。
  4. 您可以尝试直接调用IP,不带域名。这应该会跳过 DNS 查找并加快一点速度。
  5. 要查看进程在哪里变慢,您还可以strace 进程。这是how

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    如果您使用的是 PHP7,请检查 sys cpu 利用率是否高。尝试禁用大页面:

    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    

    见:cURL is very slow on PHP 7 but not PHP 5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多