红椎许多线程处于等待状态

问题描述 投票:0回答:1

在我们的模块的一个断路器模式[库] - 我们已经用锥。用例是: - 我们是轮询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)

你能帮我在微调的应用和线程池参数?我是缺少在这里?

spring-boot spring-cloud-netflix hystrix netflix circuit-breaker
1个回答
0
投票

豪猪的默认隔离策略是线程池和其默认大小恰好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更换。这意味着你可以为每个椎命令分配不同的策略。

© www.soinside.com 2019 - 2024. All rights reserved.