之前线上的Tomcat运行一段时间就会假死,导致用户访问页面打不开,这里记录一下解决问题的步骤;
由于此项目是老项目,所以并不是很清楚里面的技术实现细节;打开服务器日志也没发现什么异常;
怀疑是最近业务量上来了,导致db扛不住,查看阿里云rds云监控,发现mysql所有指标一切正常。
按照以往经验,猜想跟web服务器有关,查看tomcat监听端口占用情况,一看吓一跳,大量的tcp链接都在等待关闭:
肯定是代码问题,由于情况紧急,不可能每行代码去review,于是将服务器线程堆栈dump下来分析具体的问题,好在jdk下面提供了各种工具给我们,bingo,打开jvisualvm,导入线程堆栈信息,发现全是http的请求:
接下来可以看具体的哪行代码导致的:
ok,因为代码里面大量的创建http链接,而未进行及时关闭导致,改掉之后重新上线,观察一段时间后再也没出现