долгое время, когда получаю ответ Даббо
Странная проблема. из-за отсутствия очевидного индекса производительности, поэтому я здесь для разных идей. Описываю подробности проблемы. Я разрабатываю службу RPC с фреймворком Dubbo(версия 2.6.6) и провожу тестирование производительности.
Процессоры: 8vcore
Память: 16 ГБ (всего) -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-пользователей
Судя по этим данным, памяти процессора,disk-io и переключению контекста процессора, все эти индексы в порядке, но по мере увеличения количества пользователей 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();
}