系统分析记录-rocketmq导致jvm线程数量大
一 . 系统说明: A系统阿里云平台,5台集群,每台:1-2核,内存6G,带宽上限2M,磁盘1G。 基于tomcat容器,主要业务消费rocketmq,再pegion(服务治理工具)调用第三方服务。 同时接入20个左右topic的mq,并每一次mq都会调用一次第三方服务,第三方服务有B,C,D等系统,单台mq的qps 有几个(4个)比较大,一小时几十万。其他的比较小。 二. 问题: 5台集群一台的线程数量达到2500+,触发公司线程报警。其他四台也很高(2000+),但是还没到阀值。 三 .初步分析: 1. 调用链 看到线程数量大的这台a机器,调用B系统有多个请求时间到15S(调用超时时间是5S),并有10个左右调用失败,正常的都是1S以下,但是B系统的日志显示所有请求都是1S以下返回的。目前没有思路。 2. threaddump 2.1 活跃线程: 226个running Threads,194 个 "New I/O worker": running, holding...",活跃线程大部分是在epoolwait,应该是等着接收mq消息。 2.2 全部线程: 1900+个线程都在线程池里空闲着,等待任务来执行。 大致是:ConsumeMessageThread_X 有275个,NettyClientPublicExecutor_X 1024个,600+ 个线程池模样线程(pool