生产线程不停增长

先说一下背景

做的是一款网络设备监控的软件,通过定时任务不停巡检各个设备,像交换机,防火墙等,

为了效率一个设备启动一个线程,通过设备管理端口登录交换机执行命令,项目上线后过了几天客户说巡检数据无变化,但是其它功能正常。

首先我想到的是用jconsole连接程序:如下图

一看线程数肯定不正常,然后通过线程统计脚本统计哪类线程最多,

通过jconsole选中pool开头的线程看堆信息,如下图:

标红的是业务代码:

大概知道代码是那块的问题,这是同事写的代码,但是同事不知道该哪里,代码给大模型分析也给不出具体的位置。

这时候arthas上场,

启动arthas

在项目运行服务器执行如下命令

复制代码
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

选择运行项目进程

执行下面命令

thread -i 100 # 采样间隔100毫秒,查看线程运行时长、CPU

随便找了个pool开头的线程ID(68906)

再执行命令:

heapdump --live /tmp/thread-heap.hprof

然后把thread-heap.hprof下载到自己电脑上

通过mat分析

到这里就知道如何复现场景了,问题就定位到了。

软件行业口头禅,找到问题基本就解决问题了。