开发者社区 > 云原生 > 云消息队列 > 正文

这样三个一组的线程,数量好像不会减少而是在增加,可能是什么原因呢?

项目中使用到了 RocketMQ,通过查看线程发现出现了500 对这样三个一组的线程,数量好像不会减少而是在增加,可能是什么原因呢?httpclient-dispatch-1和 2 都是 RUNNABLE 状态,idle-connection-evictor-1都是TIMED_WAITING状态
bc71189ad74a684f369213addf50417b.png

展开
收起
小易01 2023-07-19 20:00:54 127 0
2 条回答
写回答
取消 提交回答
  • 根据您提供的信息,出现了500对这样三个一组的线程,并且数量似乎在增加而不是减少。其中,httpclient-dispatch-1httpclient-dispatch-2线程处于RUNNABLE状态,而idle-connection-evictor-1线程处于TIMED_WAITING状态。

    可能的原因如下:

    1. 未及时释放资源:您的代码中可能存在未正确释放或关闭资源的情况,导致线程无法正常退出。例如,在使用HttpClient进行HTTP请求时,如果没有正确关闭连接,可能会导致线程一直处于RUNNABLE状态。

    2. 连接池配置问题:您的代码中使用了连接池(如HttpClient连接池),但连接池的配置可能不合理。如果连接池中的空闲连接被长时间保持而没有被回收,就会出现idle-connection-evictor线程处于TIMED_WAITING状态。

    3. 程序逻辑问题:可能存在程序逻辑上的bug,导致线程没有得到正确的处理或终止的机会,从而造成线程数量增加并持续存在。

    为了解决这个问题,您可以考虑以下几点:

    1. 检查代码中的资源释放:确保在使用完资源后,及时关闭或释放它们,特别是在使用类似HttpClient连接池的情况下,及时关闭连接。

    2. 检查连接池配置:调整连接池的参数,如最大空闲时间、最大连接数等,以适应您的业务需求。确保连接池能够正确管理和回收资源。

    3. 检查程序逻辑:仔细检查代码逻辑,特别是与线程管理相关的部分。确保线程得到正确的处理和终止条件,避免出现无限增加的情况。

    4. 监控和日志记录:使用监控工具和日志记录来跟踪线程的创建和销毁,以及资源的使用情况。这可以帮助您更好地了解问题发生的原因,并进行进一步的排查和优化。

    2023-07-28 13:35:02
    赞同 展开评论 打赏
  • 意中人就是我呀!

    之前好像也有人遇到过类似的问题, 是设置了 transientStorePoolEnable = true, 可以看看是否雷同。5.X的客户端吧, 5.X的客户端是grpc协议的, 是基于http2的。此回答整理至钉群“群2-Apache RocketMQ 中国开发者钉钉群”。

    2023-07-19 23:09:39
    赞同 展开评论 打赏
问答分类:

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载