最近新版本宣布后,在运行一段时间后措施溘然无响应了,调查监控,发明JVM堆内存占用在某个时间点溘然飙升,劳务派遣管理系统,最终导致应用无响应:
劳务调派系统连上升的一种排查思路" src="/uploads/allimg/c180603/152OF0435610-1FH.png" />
重启Tomcat后,应用规复正常,而且后续时间没有产生内存上涨问题。
阐明这个JVM内存曲线,他是直线上升的,以前碰着过雷同的场景,会导致这种直线(匀速)上升的,一般是一个死轮回导致的,假如是普通请求资源泄露的话,上升曲线不会这么平稳,昆山软件开发,会和请求量有必然的干系。
死轮回导致这个线程的资源无法释放,跟着轮回次数的增多,累积的工具越来越多,最终导致堆内存耗尽。
那要如何定位到详细的死轮回位置呢?这个是个困难。之前碰着雷同的问题是通过dump出产情况的JVM内存来阐明,耗时耗力。团结之前的履历,这次我直接去nginx日志搜索响应码为504的请求,果不其然,在内存飙升时间点四周,昆山软件开发,有一个被响应504的请求。
504是什么响应码呢?这个响应码较量少碰着,指的是网关超时 (Gateway timeout)。当一个请求到Tomcat后,Tomcat假如陷入死轮回,那么这个请求自然无法获得响应,nginx期待响应超时,响应给用户504。
504响应时间点和内存飙升时间点对的上,那么或许率就是这个接口导致的,具体阐明这个接口的代码,发明白在非凡参数的环境下,会进入死轮回,修改后问题办理。
总结: