Hystrix много потоков в состоянии ожидания

Мы использовали hystrix - шаблон автоматического выключателя [библиотека] в нашем модуле. Пример использования:- мы опрашиваем 16 номеров сообщений от kafka и обрабатываем их с использованием потока pararllel, поэтому для каждого сообщения в рабочем процессе требуется 3 вызова покоя, которые защищены командой hystric. Теперь проблема в том, что когда я пытаюсь запустить свой единственный экземпляр, тогда CPU показывает пики, а дамп потока показывает много потоков в состоянии ожидания для всех 3 команд. Как ниже:-

Пропущено имя потока, но предполагается, что все пулы потоков показывают одно и то же:-

Пул потоков-7" #82 Состояние потока: WAITING (парковка) на sun.misc.Unsafe.park(собственный метод) - парковка для ожидания <0x000000004cee2312> (java.util.concurrent.SynchronousQueue$TransferStack) на java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) по адресу java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458) по адресу java.util.concurrent.SynchronousQQue:362) в java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924) в java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) в java.util.concurrent.Thec.Pecol Java:1134) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) в java.lang.Thread.run(Thread.java:748)

Не могли бы вы помочь мне в тонкой настройке приложения и параметров пула потоков? чего мне здесь не хватает?

1 ответ

Стратегия изоляции Hystrix по умолчанию - это пул потоков, а его размер по умолчанию равен 10. Это означает, что в вашем случае одновременно могут выполняться только 10 вызовов REST.

Во-первых, попробуйте увеличить значение свойства по умолчанию ниже большого.

hystrix.threadpool.default.coreSize=1000  # default is 10

Если это работает, установите правильное значение.default можно заменить на правильное HystrixThreadPoolKey для каждого пула потоков.

Если вы используете стратегию изоляции Семафоров, попробуйте увеличить приведенную ниже.

hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=1000

Выше по умолчанию тоже всего 10. default можно заменить на HystrixCommandKey название для каждого семафора.

обновленный

Чтобы выбрать стратегию изоляции, вы можете использовать свойство ниже.

hystrix.command.default.execution.isolation.strategy=THREAD or SEMAPHORE

default можно заменить на HystrixCommandKey, Это означает, что вы можете назначить разные стратегии для каждой команды Hystrix.

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