一次使用JDK自带jstack分析线程数过大的经历
序
之前有写到过modbus的协议空调面板控制,经历了去年冬天的考验,还算勉强合格。这次客户反馈CPU占用高,线程数比较大。
一、现象说明
这边前置机在局域网跑modbus项目,通过与控制局域网内网关通讯,走modbus协议控制空调面板。用的时tomcat9跑项目,然后加到了服务里。这里使用系统自带的资源管理器查看线程数情况。
看到没,线程数1510,有点大啊。
二、使用JDK自带工具分析原因
不得不说JAVA真的是牛啊,纵然JDK收费,我也爱它。我这里使用的是免费的最高版本1.8。
首先说明cmd命令框需要以管理员身份运行,否则报错,如图:
这里的1848是pid进程号。
以管理员身份运行cmd框后,因为不想在黑框框里看,想保存为文件查看,所以使用
jstack -F -l 1848 >> 路径\文件名,
不知道命令怎么用,可以直接输入jstack,它会提示的,或者问度娘。
我这里保存为txt,即文件名1111.txt。如图:
文件名出来后,可以看到好多线程阻塞,BLOCKED就是阻塞的意思。
然后,还会打印出阻塞的代码行。到此原因就定位到了。马上要下大雨了,老婆在催回家,明天来分析代码。这个代码大致看了下是老外写的,modbus的相关:
分析记过是指向这一行的。明天继续。