Hystrix много потоков в состоянии ожидания - PullRequest
0 голосов
/ 04 февраля 2019

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

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

Пул потоков-7 "# 82 Состояние потока: WAITING (стоянка) на солнце.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.utilueynchronQurent.java: 924) в java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:1074) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1134) в рабочей среде java.util.(ThreadPoolExecutor.java:624) на java.lang.Thread.run (Thread.java:748)

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

1 Ответ

0 голосов
/ 07 февраля 2019

Стратегия изоляции 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.

...