VertX eventbus publi sh событие, вызывающее высокую загрузку ЦП - PullRequest
0 голосов
/ 02 августа 2020

Мы используем метод vertx.eventBus (). Publi sh () из API для вызовов GET, POST, PATCH, PUT. Потребитель этого метода только помещает данные в кеш [мы используем кеш HazleCast]. Таким образом, этот потребитель вызывается из всех API-интерфейсов [сильно ограничен]

Во время выполнения этого при тестировании производительности это вызывает проблему задержки потока для Vertx, и мы замечаем это, поскольку ЦП в это время также становится выше. Это происходит в течение нескольких секунд, затем все возвращается в нормальное состояние, а затем через какое-то время это происходит снова.

После исследования этот метод [т.е. метод потребителя для vertx publi sh event] обнаруживается как узкое место и показывает метод с наибольшим временем ожидания во время этого прерывистого всплеска.

После прочтения большого количества документации я обнаружил, что это, как показано ниже. выполняется до завершения текущего вызова (и любых других методов, запланированных перед ним в событии Netty l oop).

Не могли бы вы предложить это, это выглядит как vertx.eventBus (). publi sh метод не должен использоваться для его использования в одном приложении, и это не лучший подход.

1 Ответ

0 голосов
/ 22 августа 2020

Оказывается, проблема связана с реализацией метода publi sh. Метод Vertx publi sh следует шаблону pub-sub. Реализация подписчика должна быть неблокирующей. Это означает, что подписчик должен использовать обработчик vertx.executeBlocking, чтобы обернуть код внутри, чтобы он не блокировал поток от издателя.

...