解决spring cloud报ThreadPoolExecutor [Running, pool size = 10, active threads = 10, queued tasks = 0 错误
ThreadPool
A simple C++11 Thread Pool implementation
项目地址:https://gitcode.com/gh_mirrors/th/ThreadPool
免费下载资源
·
这个是我这边在生产环境碰到的问题,因为测试环境访问量不是很大,所以就没测出来。也没有压测,如果压测的话也可以轻易的压测出来这个问题,其实它具体的异常如下:
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@7ed27b0 rejected from java.util.concurrent.ThreadPoolExecutor@70927bf[Running, pool size = 10, active threads = 10, queued tasks = 0, completed tasks = 2671]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
at com.netflix.hystrix.strategy.concurrency.HystrixContextScheduler$ThreadPoolWorker.schedule(HystrixContextScheduler.java:172)
at com.netflix.hystrix.strategy.concurrency.HystrixContextScheduler$HystrixContextSchedulerWorker.schedule(HystrixContextScheduler.java:106)
我百度了很长时间都没有找到对应的答案,为此我也特意取了这样一个标题,希望碰到这样问题的朋友能容易看到是怎样解决这个问题的,废话不多说了,直接开始吧!
我能解决这个问题是来源于某个大佬的这篇文章 踩坑 Spring Cloud Hystrix 线程池队列配置 。
大家看了之后肯定就会茅舍顿开的,具体看看上面的文章,这里我这边就直接告诉大家答案了。
我们只需要配置一下 Hystrix 线程池的配置就行了,我这边配置如下:
#并发执行的最大线程数,默认10
hystrix.threadpool.default.coreSize=50
#BlockingQueue的最大队列数,默认值-1
hystrix.threadpool.default.maxQueueSize=1500
#即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
hystrix.threadpool.default.queueSizeRejectionThreshold=1000
注意:如果要调整队列,必须同时修改maxQueueSize和queueSizeRejectionThreshold属性的值,否则都会出现异常!因为queueSizeRejectionThreshold 官方的默认值只有5。
GitHub 加速计划 / th / ThreadPool
7.74 K
2.22 K
下载
A simple C++11 Thread Pool implementation
最近提交(Master分支:2 个月前 )
9a42ec13 - 9 年前
fcc91415 - 9 年前
更多推荐
已为社区贡献1条内容
所有评论(0)