Java Spring Webflux в Kubernetes: всегда [или-http-epoll-1], [или-http-epoll-2], [или-http-epoll-3], [или-http-epoll-4], несмотря на настроенный ресурс

Небольшой вопрос относительно веб-приложения Java 11 Spring Webflux 2.6.6+, контейнеризованного и развернутого с использованием Kubernetes.

Из журналов приложений веб-приложений я вижу такие вещи, как:

INFO [service,1bcce5941c742568,22c0ab2133c63a77] 11 --- [or-http-epoll-2] a.b.c.SomeClass  : Some message from the reactive pipeline.
INFO [service,67cb40974712b3f4,15285d01bce9dfd5] 11 --- [or-http-epoll-4] a.b.c.SomeClass  : Some message from the reactive pipeline.
INFO [service,5011dc5e09de30b7,f58687695bda20f2] 11 --- [or-http-epoll-3] a.b.c.SomeClass  : Some message from the reactive pipeline.
INFO [service,8046bdde07b13261,5c30a56a4a603f4d] 11 --- [or-http-epoll-1] a.b.c.SomeClass  : Some message from the reactive pipeline.

И всегда я вижу только [or-http-epoll-1] [or-http-epoll-2] [or-http-epoll-3] [or-http-epoll-4], что, как мне кажется, означает: [reactor-http-epoll-N]

Проблема в том, что сколько CPU я не выделяю из Kubernetes, всегда эти 4, ни меньше, ни больше.

Я попытался:

  resources:
            requests:
              cpu: 1
              memory: 1G
            limits:
              cpu: 2
              memory: 2G

  resources:
            requests:
              cpu: 4
              memory: 4G
            limits:
              cpu: 6
              memory: 6G

  resources:
            requests:
              cpu: 10
              memory: 10G
            limits:
              cpu: 10
              memory: 10G

Но опять же всегда только эти 4.

Мне трудно понять, в чем здесь проблема, и почему я застрял только/всегда с 4 "или-http-epoll-".

Спасибо

Отвечает ли это на ваш вопрос? WebFlux — темы Reactor Http Epoll

Alex 08.05.2022 00:30

У меня была возможность посмотреть ссылку. Особенно ответ: «Количество потоков по умолчанию зависит от количества ядер хост-системы». Вот почему я задаю свой вопрос. Я настроил другой вариант количества ядер, но все равно вижу то же самое.

PatPatPat 08.05.2022 01:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию WebFlux использует Netty в качестве основного веб-сервера. Вот как Netty определяет количество потоков в пуле Нетти - LoopResources

/**
* Default worker thread count, fallback to available processor
* (but with a minimum value of 4)
*/
int DEFAULT_IO_WORKER_COUNT = Integer.parseInt(System.getProperty(
    ReactorNetty.IO_WORKER_COUNT,
    "" + Math.max(Runtime.getRuntime().availableProcessors(), 4)));

Следующий вопрос, какая текущая Runtime.getRuntime().availableProcessors()?

Это зависит от версии Java. До версии Java 10 приложение в Docker видит ЦП на машине, а не внутри контейнера.

Вы можете создать простое Java-приложение для проверки

class TestCpu {
    public static void main(String[] args) {
       int processors = Runtime.getRuntime().availableProcessors();
       System.out.println("CPU cores: " + processors);
  }
}

Это действительно правильный ответ. По какой-то причине этот фрагмент кода всегда показывает одно и то же число, независимо от того, сколько ЦП я выделяю со стороны Kubernetes. Я считаю, что это скорее проблема Kubernetes, а не проблема Spring. Спасибо

PatPatPat 09.05.2022 14:28

какую версию java вы используете для контейнеров?

Alex 09.05.2022 16:22

В качестве базового образа я использую обычную alpine java 11, а для Kubernetes использую AKS

PatPatPat 09.05.2022 16:40

Другие вопросы по теме