问题
平时空闲时间,一直给朋友维护一个SpringBoot项目。随着业务发展,朋友经常反馈服务经常崩溃,无法正常访问。通过jvm自带的jconsole观察到,该项目自从启动后,线程数量一直出于不断增加的趋势,没有线程回收的迹象,如下图所示:
由此诊断,线程的不回收导致随着时间延长,大量的系统资源被占用,后续的请求线程无法创建,导致服务崩溃。
分析
我们需要找到线程没有回收的原因。由于该项目是运行windows服务器,我们采用jvm自带的jvisualvm进行导出线程的堆日志。
cmd,输入以下命令:
jvisualvm
回车确认,打开了进入jvisualvm监控页面。
通过以下界面,就可以查看到线程Dump信息。