swoft-cloud / swoft

🚀 PHP Microservice Full Coroutine Framework
https://swoft.org
Apache License 2.0
5.58k stars 788 forks source link

Request Bean并发获取会报错 #660

Closed yzrzr closed 5 years ago

yzrzr commented 5 years ago
Q A
Bug report? yes/no
Feature request? yes/no
Swoft version 2.0
Swoole version 4.2
PHP version 7.2
Runtime environment Mac

Details

使用\Swoft\Bean\BeanFactory::getRequestBean("AuthRequest", (string)\Swoft\Co::tid());并发获取时控制台会报如下错误: Warning: Uncaught ErrorException: require(/private/var/folders/sq/tjg51mrn09v7qgkz1mky0ds00000gn/T/AuthRequest_5cea4c2d9f1dd.php): failed to open stream: No such file or directory in /Users/coco/code/php/swoft2.0/vendor/swoft/proxy/src/Proxy.php:54 Stack trace:

0 /Users/coco/code/php/swoft2.0/vendor/swoft/aop/src/Concern/AopTrait.php(54): Swoft\Error\DefaultErrorDispatcher->handleError(2, 'require(/privat...', '/Users/coco/cod...', 54, Array)

1 /Users/coco/code/php/swoft2.0/vendor/swoft/aop/src/Concern/AopTrait.php(31): Swoft\Error\DefaultErrorDispatcher_5cea4c2b391ae->__invokeTarget('handleError', Array)

2 /private/var/folders/sq/tjg51mrn09v7qgkz1mky0ds00000gn/T/DefaultErrorDispatcher_5cea4c2b391ae.php(31): Swoft\Error\DefaultErrorDispatcher_5cea4c2b391ae->__proxyCall('Swoft\Error\Def...', 'handleError', Array)

3 /Users/coco/code/php/swoft2.0/vendor/swoft/proxy/src/Proxy.php(54): Swoft\Error\DefaultErrorDispatcher_5cea4c2b391ae->handleError(2, 'require(/privat...', '/Users/coco/cod...', 54, Array)

4 /Users/coc in /Users/coco/code/php/swoft2.0/vendor/swoft/proxy/src/Proxy.php on line 54

PHP Fatal error: Swoft\Proxy\Proxy::newClassName(): Failed opening required '/var/folders/sq/tjg51mrn09v7qgkz1mky0ds00000gn/T/AuthRequest_5cea4c2d9f1dd.php' (include_path='.:/usr/local/Cellar/php/7.2.11/share/php/pear') in /Users/coco/code/php/swoft2.0/vendor/swoft/proxy/src/Proxy.php on line 54

Fatal error: Swoft\Proxy\Proxy::newClassName(): Failed opening required '/var/folders/sq/tjg51mrn09v7qgkz1mky0ds00000gn/T/AuthRequest_5cea4c2d9f1dd.php' (include_path='.:/usr/local/Cellar/php/7.2.11/share/php/pear') in /Users/coco/code/php/swoft2.0/vendor/swoft/proxy/src/Proxy.php on line 54

/**
 * @Controller(prefix="v1")
 */
class SiteController
{
    /**
     * @RequestMapping("index")
     */
    public function index()
    {
        \Swoft\Bean\BeanFactory::getRequestBean("AuthRequest", (string)\Swoft\Co::tid());
    }
}

/**
 * @Bean(scope="request", name="AuthRequest")
 */
class AuthRequest
{
}

正常访问是没问题的,使用ab工具会出现问题,ab -c 100 -n 1000 -k "http://127.0.0.1:18306/v1/index",无法重现可以把-c的并发数提高

stelin commented 5 years ago

感谢反馈问题,我们及时修复!

stelin commented 5 years ago

@yangjianfeng9527

[root@a90a17194ad4 /]# ab -n 10000 -c 3000 127.0.0.1:88/bean/request This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests

Server Software: swoole-http-server Server Hostname: 127.0.0.1 Server Port: 88

Document Path: /bean/request Document Length: 15 bytes

Concurrency Level: 3000 Time taken for tests: 1.991 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 1700000 bytes HTML transferred: 150000 bytes Requests per second: 5021.95 [#/sec] (mean) Time per request: 597.377 [ms] (mean) Time per request: 0.199 [ms] (mean, across all concurrent requests) Transfer rate: 833.72 [Kbytes/sec] received

centos 没有复现你这个问题,你是 mac 么

stelin commented 5 years ago
/**
 * Class BeanController
 *
 * @since 2.0
 *
 * @Controller(prefix="bean")
 */
class BeanController
{
    /**
     * @RequestMapping()
     *
     * @return array
     * @throws ReflectionException
     * @throws ContainerException
     */
    public function request(): array
    {
        $id = (string)Co::tid();

        /* @var RequestBean $request*/
        $request = BeanFactory::getRequestBean('requestBean', $id);
        return $request->getData();
    }
}
yzrzr commented 5 years ago

是的,我开发环境是mac

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: 李霖 notifications@github.com 发送时间: 2019年5月26日 19:15 收件人: swoft-cloud/swoft swoft@noreply.github.com 抄送: yangjianfeng9527 403565474@qq.com, Mention mention@noreply.github.com 主题: 回复:[swoft-cloud/swoft] Request Bean并发获取会报错 (#660)

@yangjianfeng9527

[root@a90a17194ad4 /]# ab -n 10000 -c 3000 127.0.0.1:88/bean/request This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests

Server Software: swoole-http-server Server Hostname: 127.0.0.1 Server Port: 88

Document Path: /bean/request Document Length: 15 bytes

Concurrency Level: 3000 Time taken for tests: 1.991 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 1700000 bytes HTML transferred: 150000 bytes Requests per second: 5021.95 [#/sec] (mean) Time per request: 597.377 [ms] (mean) Time per request: 0.199 [ms] (mean, across all concurrent requests) Transfer rate: 833.72 [Kbytes/sec] received

centos 没有复现你这个问题,你是 mac 么

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

stelin commented 5 years ago

你用centos 测下,我要找下mac 试试

stelin commented 5 years ago

@yangjianfeng9527 你试下最新的2.0.1 做了优化