过程描述 : 开始时服务器一直老是自己就突然挂掉了,几次之后我查看日志,发现一个错误异常:This is very likely to create a memory leak. Stack trace of thread ,我就以为只是单纯的内存溢出,内存不够引起的,然后按照线面的方法加大内存,可是后面又出现了这个问题,只不过出现的频率降低了,以前是1天一次,现在是3天左右一次。
第一次分析:
问题1 :This is very likely to create a memory leak. Stack trace of thread
说明 : tomcat内存溢出 ,内存分配过小,jvm默认的内存分配时128m,这个肯定不满足项目的运行。
解决方案 在catalina或者 setclasspathd的文件顶部设置内存大小
JAVA_OPTS="-server -Xms6144m -Xmx6144m -XX:PermSize=1024m -XX:MaxPermSize=1024m"
第二次分析:
按以上方案解决之后,可是过一段时间又出现这个问题了,然后再进一步分许日志
发现有很多类似一下的错误
11-Sep-2019 10:41:46.687 WARNING [Catalina-utility-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [main] appears to have started a thread named [MasterListener-redismaster-[redis1.sge.wisesoft.com:26370]] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
11-Sep-2019 10:41:46.691 WARNING [Catalina-utility-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [main] appears to have started a thread named [MasterListener-redismaster-[redis2.sge.wisesoft.com:26370]] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
我观察了这一天的日志记录情况,发现出现memory leak的时间点刚好是我热部署系统的时候(用的jenkins部署的项目)分析到这里我觉得问题应该找到了,原因是: 热部署导致内存溢出从而使项目down掉
解决办法:
第一种 : 去掉热部署 (如果是开发的话,也可以不管,每次挂掉重启一下也可以)
第二种 :如下写一个监听,但这种对我不太适用,因为我不是一个项目,并且代码也不是一人维护,
第三种 :继续加大内存(如果你的服务器内存还足够的话)
我的解决方案是:Jenkins打包部署完之后,重启tomcat。
原因分析 :https://blog.csdn.net/lixld/article/details/80211871