线上的Tomcat运行一段时间就会假死,通过netstat查看端口情况会发现tomcat的端口出现大量的CLOSE_WAIT,此时Tomcat会停止响应前端请求,同时服务端的日志,操作等将全部停止,而且没有出现任何异常。
#netstat -atp | grep 8191 | wc -l
肯定是代码问题,于是将服务器线程堆栈dump下来分析具体的问题,好在jdk下面提供了各种工具给我们,bingo,打开jvisualvm,导入线程堆栈信息,发现全是http的请求:
接下来可以看具体的哪行代码导致的:
因为代码里面大量的创建http链接,而未进行及时关闭导致,改掉之后重新上线,观察一段时间后再也没出现。