curl内部调用性能急剧下降

发布于 2022-09-05 09:03:06 字数 2269 浏览 15 评论 0

使用CURL调用同一机子的其他项目接口,几个并发就发生阻塞了。

例子(虚拟机配置2核4G)

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 php56101.debug (be patient)...apr_pollset_poll: The timeout specified has expired (70007)

PHP-FPM Worker默认配置

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.process_idle_timeout = 10s
;pm.max_requests = 500

疑问

  1. 为什么到了max_children个并发,Requests per second会下降这么快??

  2. 在同一机子情况下,怎么优化这个问题?同事用.NET是不会出现这种情况的啊 :-(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

甩你一脸翔 2022-09-12 09:03:06

php-fpm是多进程形式。你max_children为5.说明同时正在处理的请求为5,而你curl的时候,PHP可能没执行完,那这个fpm进程将不能处理新请求。所以最多同时处理5个同时请求

太傻旳人生 2022-09-12 09:03:06

看下php-fpm的worker进程配置

梦里梦着梦中梦 2022-09-12 09:03:06

不用CURL用

file_get_contents
南风几经秋 2022-09-12 09:03:06

同样遇到过这种问题,在nginx上配置
配置一个upstram 代理到 本台机器的 php-fpm 上,多开几个php-fpm实例监听多个端口,应该可以解决

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文