php - curl内部调用性能急剧下降

查看:126
本文介绍了php - curl内部调用性能急剧下降的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

使用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是不会出现这种情况的啊 :-(

解决方案

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

这篇关于php - curl内部调用性能急剧下降的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆