版权声明:转载请注明来源 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框架的压测情况,请参考: