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

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

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

Пул потоков-7" № 82 Состояние потока: ОЖИДАНИЕ (парковка) в 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.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java :362) в java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924) в java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. java:1134) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) в java.lang.Thread.run(Thread.java:748)

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


person Rahul Singh    schedule 04.02.2019    source источник


Ответы (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.

person yongsung.yoon    schedule 07.02.2019
comment
хорошо, спасибо за информацию. Таким образом, это означает, что для стратегии типа потока в пуле будет доступно соединение в зависимости от размера ядра. Не могли бы вы помочь мне понять, какой поток использовать против семафора? - person Rahul Singh; 07.02.2019
comment
Одно неправильное понимание ваших вопросов заключается в том, что каждая команда будет выполняться в одном потоке после получения потока из пула в случае стратегии изоляции потоков. Это пул потоков, а не пул соединений. Таким образом, получение соединения будет осуществляться пулом соединений, который использует ваш http-клиент. Это совершенно не имеет отношения к hystrix. - person yongsung.yoon; 08.02.2019
comment
Что касается потока и семафора, я обновил свой ответ выше. - person yongsung.yoon; 08.02.2019