前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >针对Dubbo线程池的优化建议

针对Dubbo线程池的优化建议

作者头像
SmileNicky
发布2024-12-23 11:09:40
发布2024-12-23 11:09:40
18100
代码可运行
举报
文章被收录于专栏:Nicky's blog
运行总次数:0
代码可运行

最近生产环境出现一个问题,通过排查日志发现Dubbo线程池满了,报错信息如下:

代码语言:javascript
代码运行次数:0
复制
RejectedExecutionException:Thread pool is EXHAUSTED ! Thread Name: DubboServerHandler-xx.xx.xxx:2201, Pool Size: 300 (active: 283, core: 300, max: 300, largest: 300)

Dubbo默认的线程池大小是200,但是如果代码写的有问题,比如while(true)一直循环,导致cpu100%,或者是频繁请求,并发请求高,都可能导致这个问题

所以,针对这种情况,有一些优化建议:

  • 调大线程池大小 默认情况下,Dubbo的线程池大小为200,可以根据服务器节点数量和业务请求量适当调整参数
代码语言:javascript
代码运行次数:0
复制
dubbo.protocol.threads=5000
  • 修改线程池类型 Dubbo线程池类型,默认的是fixed固定大小线程池,另外几种是cached缓存线程池、limited上届线程池、eager定时线程池。fixed线程池适用于任务执行时间相对固定的服务,而cached线程池适用于任务执行时间差异较大的服务。因为公司项目请求不算很频繁,所以选用缓存线程池是可以有效节省服务器资源的,请求不频繁,fixed 类型的线程池中大量线程空闲会造成服务器资源浪费
代码语言:javascript
代码运行次数:0
复制
dubbo.protocol.threadpool=cached
  • 调整线程池Dispatcher模式 Dubbo提供了多种消息分发模型,如AllDispatcher、DirectDispatcher、MessageOnlyDispatcher等。选择合适的分发模型可以提高线程池的效率。这里配置选择“message”,即只有请求响应消息派发到线程池,其它连接断开事件、心跳等消息,直接在IO线程上执行
代码语言:javascript
代码运行次数:0
复制
dubbo.protocol.dispatcher=message
  • 优化业务逻辑 如果某些接口处理逻辑过长,就需要对这些请求的处理逻辑进行优化,减少线程的占用时间
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档