在我们的模块的一个断路器模式[库] - 我们已经用锥。用例是: - 我们是轮询16号从卡夫卡消息,并使用pararllel流处理它们,因此,对于每个工作流需要其通过hystric命令保护的3-其余的呼叫的消息。现在的问题是,当我尝试运行我的单实例,然后CPU显示尖峰和线程转储显示所有3个命令等待状态的线程。如下图所示: -
省略线程的名字,但假设所有的所有线程池,它显示了同样的事情: -
线程池-7" #82线程状态:等待(停车场)在sun.misc.Unsafe.park(本机方法) - 停车java.util中等待<0x000000004cee2312>(一java.util.concurrent.SynchronousQueue中的$ TransferStack) .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)
你能帮我在微调的应用和线程池参数?我是缺少在这里?
豪猪的默认隔离策略是线程池和其默认大小恰好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
更换。这意味着你可以为每个椎命令分配不同的策略。