利用swoole多进程压测服务框架dubbo-php-framework

版权声明:转载请注明来源 https://blog.csdn.net/u013702678/article/details/88067186

因工作需要,近期对dubbo-php-framework进行了压测,重点是看dubbo-php-framework本身的性能,故直接在本地虚拟机上做了压测,provider和consumer都是同台虚拟机上执行。

测试的场景为1k字符串的原样返回,即发1k字符串请求到provider,provider不做处理,原样返回。

测试代码如下:

$s = new ProcessPool();
$s->start();

class ProcessPool
{
    private $work_pid = [];
    private $work_count = 0;

    public function start()
    {
        for ($i=0;$i<3;$i++)
        {
            $this->startWorker();
        }
    }

    public function cost_tongji(\swoole_process $worker)
    {
        while (($msg=$worker->pop())!=null)
        {
            if ($msg === false) {
                break;
            } else {
                echo $msg.PHP_EOL;
            }
        }
    }

    private function cost_statics()
    {
        $customMsgKey = 1;
        $mod = 2 | swoole_process::IPC_NOWAIT;
        $process = new \swoole_process([$this,"cost_tongji"],false,0);
        $process->useQueue($customMsgKey,$mod);
        $process->start();
        \swoole_process::wait();
    }

    public function cost(\swoole_process $worker)
    {
        $str = str_repeat("a",50*1024);
        $service = 'com.fenqile.example.DemoService';
        $proxy = FSOFApi::newProxy($service, 3);
        $start = microtime(true);
        for($i=0;$i<1000;$i++)
        {
            $proxy->invoke("sayHello",$str);
        }
        $end = microtime(true);
        $worker->push((($end-$start)));
    }

    public function startWorker()
    {
        $customMsgKey = 1;
        $mod = 2 | swoole_process::IPC_NOWAIT;
        $process = new \swoole_process([$this,"cost"],false,0);
        $process->useQueue($customMsgKey,$mod);
        $child_pid = $process->start();
        $this->work_pid[$child_pid] = $process;
        $this->work_count += 1;

        \swoole_process::signal(SIGCHLD, function ($sig) {
            while (true)
            {
                $ret = \swoole_process::wait(false);
                if($ret)
                {
                    if(isset($ret['pid']))
                    {
                        if(array_key_exists($ret['pid'],$this->work_pid))
                        {
                            unset($this->work_pid[$ret['pid']]);
                            if($this->work_count<64)
                            {
                                $this->startWorker();
                            }
                        }

                        if(empty($this->work_pid) || count($this->work_pid)==0)
                        {
                            $this->cost_statics();
                            exit;
                        }
                    } else {
                        break;
                    }
                } else {
                    break;
                }
            }
        });
    }
}

虚拟机配置:

2G内存,processor_count为4

整体性能如下:

1k字符串原样返回,2ms以内,QPS 500以内。

物理机器上,应该性能更高,虚拟机上资源太缺,哈哈。

下面是淘宝开源的dubbo框架的压测情况,请参考:

http://dubbo.apache.org/zh-cn/docs/user/perf-test.html

猜你喜欢

转载自blog.csdn.net/u013702678/article/details/88067186