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

62 篇文章 0 订阅
25 篇文章 2 订阅

因工作需要,近期对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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值