内存泄漏异常解决

    在生产环境部署tomcat及应用,结果启动时报内存泄漏的异常:

10-Jun-2018 10:57:12.694 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
10-Jun-2018 10:57:12.697 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/nb-tp] startup failed due to previous errors
10-Jun-2018 10:57:12.752 警告 [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [nb-tp] appears to have started a thread named [pool-1-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
 java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
 java.util.concurrent.FutureTask.get(FutureTask.java:191)
 ch.qos.logback.core.net.AbstractSocketAppender.waitForConnectorToReturnASocket(AbstractSocketAppender.java:218)
 ch.qos.logback.core.net.AbstractSocketAppender.run(AbstractSocketAppender.java:188)
 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
 java.util.concurrent.FutureTask.run(FutureTask.java:266)
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

 java.lang.Thread.run(Thread.java:748)

大致的意思就是有一个线程启动起来后无法停止,为了防止内存泄漏,tomcat抛出异常,导致服务无法启动。这个问题曾经在测试环境出现过,当时的原因为:分布式部署时将service的dubbo包(里面含有连接数据库的服务)打了进去,导致出现两个datasource,tomcat就会报错:有一个jdbc连接已存在但是无法关闭,为防止内存泄漏,服务终止运行。

    我怀疑仍旧是同样的原因导致,仔细检查了项目中的jar包,发现没有问题。真是令人头痛,在网上查找类似问题,也没有找到答案。但是思路明确了:这个错误只是顶层错误,给出的错误信息很笼统,导致出现错误的原因也非常多,需要查询底层日志找寻答案,有网友给出了一些提示:比如这tomcat中配置打印debug日志。非常不错的建议,我是直接在项目打印的日志中找到了问题:mysql数据库中的SYS_AA表不存在。数据库是我刚刚搭建并导入的数据表,怎么会不存在呢?我进入数据库后查询这张表确实在。这就有点奇怪了,我做了很多尝试,比如切换数据库用户等等,始终无法解决问题,一直提示该表不存在。后来忽然看到,数据库中的表明为sys_aa,这才想到很有可能是因为没有配置大小写不敏感的!到了my.cnf文件一看果然没有配置。

   配置好lower_case_table_names=1,重启mysql数据库,项目正常启动。

猜你喜欢

转载自blog.csdn.net/frozenkevin/article/details/80654801