Пропускная способность в весенней загрузке Netty веб-приложения - PullRequest
0 голосов
/ 16 мая 2018

Я бы хотел повысить пропускную способность своего веб-сервера.Но я не понимаю, что на самом деле происходит, когда я тестирую это с высокой нагрузкой (jmeter).

Я запускаю приложение весенней загрузки webflux (spring boot 2.0.2, netty) на компьютере с 8 core ЦП.
Я создал простой контроллер с этим кодом:

@GetMapping("/test-delay")
public Mono<String> testGetWithDelay() throws InterruptedException {
    Thread.sleep(3000);
    return Mono.just("current time:" + LocalDateTime.now());
}

"Thread.sleep(3000)" - это имитация синхронных работ.Затем я запускаю jmeter tests со 100 потоками.И я вижу пропускную способность только 2.5 message/sec.Я думал, что это должно быть около 100 messages/3 sec (около 30 сообщений / сек)

Итак, у меня есть 2 вопроса:

  1. почему пропускная способность такая низкая
  2. как мне справиться

Спасибо

1 Ответ

0 голосов
/ 16 мая 2018

Ваши результаты верны.Вы получаете 2,5 сообщения в секунду с задержкой 3 секунды (в каждом потоке), что дает нам 2.5 * 3 = 7.5 = 8 ядер.Webflux по умолчанию использует availableProcessors() в качестве числа потоков по умолчанию для обработки сетевого / рабочего ввода-вывода.

Так что вам нужно либо увеличить количество потоков обработки , либо переместить Thread.sleep(3000) блок для разделения ThreadPool/Executor (чтобы рабочие потоки не блокировались) или ваш код Thread.sleep(3000) должен выполняться в каком-то неблокирующем API (например, в webflux вы можете использовать Mono.fromCallable).

Я бы порекомендовал вам использовать второй / третий подход, поскольку неблокирующий API никогда не должен блокироваться.

...