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.