很长一段时间,当你得到dubbo的回应

ix0qys7i  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(188)

一个奇怪的问题。因为没有明显的性能指标,所以我在这里有不同的想法。我描述这个问题的细节。我正在用dubbo(版本2.6.6)框架开发一个rpc服务,并进行性能测试。有人能帮忙吗?
CPU:8vcores
内存:16g(总计)-xms5g-xmx5g
试验结果:

users     TPS    average-response-time  cpu                  memory     disk-io         
2000      2208          894ms           30%(single-avg)        42%      824    
1000      2071        476ms             30%(single-avg)        42%      849      
500       1863        250               27%(single-avg)        42%      410          
200       1734        105               26%(single-avg)        42%      340

切换上下文数据:
2000个用户

1000个用户

500个用户

200个用户

从这些数据来看,cpu内存、磁盘io和cpu上下文切换,这些指标都是可以的,但是随着用户的增加,tps没有显著增加,但是平均响应时间显著增加。
那么问题出在哪里呢,我知道一些关于锁的东西,或者关于锁的队列,如何测试锁的队列大小?有什么工具可以做这个吗?为什么平均响应时间花费这么多时间?
来自dubbo framework com.alibaba.dubbo.remoting.exchange.support.defaultfuture的密钥代码

@Override
    public Object get() throws RemotingException {
        return get(timeout);
    }

    # THIS METHOD COST MUCH TIME!!!!
    @Override
    public Object get(int timeout) throws RemotingException {
        if (timeout <= 0) {
            timeout = Constants.DEFAULT_TIMEOUT;
        }
        if (!isDone()) {
            long start = System.currentTimeMillis();
            lock.lock();
            try {
                while (!isDone()) {
                    done.await(timeout, TimeUnit.MILLISECONDS);
                    if (isDone() || System.currentTimeMillis() - start > timeout) {
                        break;
                    }
                }
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            } finally {
                lock.unlock();
            }
            if (!isDone()) {
                throw new TimeoutException(sent > 0, channel, getTimeoutMessage(false));
            }
        }
        return returnFromResponse();
    }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题