【问题标题】:hystrix many threads in waiting statehystrix很多线程处于等待状态
【发布时间】:2019-02-08 19:22:15
【问题描述】:

我们在其中一个模块中使用了 hystrix - 断路器模式 [库]。 用例是:- 我们从 kafka 轮询 16 条消息并使用并行流处理它们,因此,对于工作流中的每条消息,它需要 3 个受 hystric 命令保护的休息调用。现在,问题是当我尝试运行我的单个实例时,CPU 显示峰值,线程转储显示所有 3 个命令的许多线程处于等待状态。如下:-

省略了线程名称,但假设所有线程池都显示相同的内容:-

线程池 7" #82 线程状态:WAITING(停车) 在 sun.misc.Unsafe.park(本机方法) - 停车等待 (a 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)

您能帮我微调应用程序和线程池参数吗? 我在这里缺少什么?

【问题讨论】:

    标签: spring-boot spring-cloud-netflix hystrix netflix circuit-breaker


    【解决方案1】:

    Hystrix默认的隔离策略是threadpool,默认大小只有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 命令分配不同的策略。

    【讨论】:

    • 好的,谢谢您的信息。因此,这意味着对于线程类型的策略,池中的连接将取决于核心大小。您能否帮助我了解使用线程与信号量的哪一个?
    • 你的问题中的一个错误理解是,在线程隔离策略的情况下,从池中获取一个线程后,每个命令将执行一个线程。是线程池,不是连接池。因此,获取连接将由您的 http 客户端正在使用的连接池完成。与hystrix完全无关。
    • 至于线程与信号量,我已经更新了我上面的答案。
    猜你喜欢
    • 2018-01-17
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多