Java 内存泄漏Grails在Tomcat7中的应用

Java 内存泄漏Grails在Tomcat7中的应用,java,tomcat,grails,memory-leaks,Java,Tomcat,Grails,Memory Leaks,我有一个grails(v2.1.5)应用程序正在生产中,它运行良好,我可以毫无问题地重新部署,但我已经更新了该应用程序(进行了一些更改),当我部署新war时,出现内存泄漏错误,服务器启动但应用程序不工作(浏览器中的页面只是withe页面),我尝试重新启动实例,停止所有服务 我只能重新部署过去的战争。我如何解决这个问题 谢谢 错误: 2014年3月9日下午4:02:14 org.apache.catalina.core.StandardContext startInternal严重:错误liste

我有一个grails(v2.1.5)应用程序正在生产中,它运行良好,我可以毫无问题地重新部署,但我已经更新了该应用程序(进行了一些更改),当我部署新war时,出现内存泄漏错误,服务器启动但应用程序不工作(浏览器中的页面只是withe页面),我尝试重新启动实例,停止所有服务

我只能重新部署过去的战争。我如何解决这个问题

谢谢

错误:

2014年3月9日下午4:02:14 org.apache.catalina.core.StandardContext startInternal严重:错误listenerStart

2014年3月9日下午4:07:17 org.apache.catalina.core.StandardContext Start内部严重:由于以前的错误,上下文[]启动失败

2014年3月9日下午4:07:17 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc严重:web应用程序[]注册了JDBC驱动程序[com.mysql.JDBC.driver],但在web应用程序停止时未能注销。为了防止内存泄漏,JDBC驱动程序已被强制注销

2014年3月9日下午4:07:17 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重:web应用程序[]似乎启动了名为[放弃连接清理线程]的线程,但未能停止该线程。这很可能会造成内存泄漏

2014年3月9日下午4:07:17 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重:web应用程序[]似乎已启动名为[net.sf.ehcache]的线程。CacheManager@61783b69]但却未能阻止它。这很可能会造成内存泄漏

2014年3月9日下午4:07:17 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重:web应用程序[]似乎已启动名为[com.padelsix.SecRole.data]的线程,但未能停止该线程。这很可能会造成内存泄漏


您发布的日志不包含问题的根源。这不是内存泄漏。它也与Grails无关。任何java web应用程序都可以让tomcat记录这一点。该消息说,它可能会导致内存泄漏,但现在不是导致内存泄漏。

应该有另一段日志指向实际问题。

主要问题不是潜在的内存泄漏,而是日志的第一部分:

2014年3月9日下午4:02:14 org.apache.catalina.core.StandardContext startInternal严重:错误listenerStart

2014年3月9日下午4:07:17 org.apache.catalina.core.StandardContext startInternal严重:由于以前的错误,上下文[]启动失败

错误“严重:错误listenerStart”通常意味着servlet上下文侦听器(启动时运行)中存在阻止webapp启动的错误


catalina.out
localhost..log
中查找错误。您可能需要启用其他日志记录以查找此错误的根本原因。Google搜索“严重:错误listenerStart”,并查找您的Tomcat版本的具体说明。

web应用程序[/services]似乎启动了一个名为
[net.sf.ehcache]的线程。CacheManager@37ce6a10]
但未能停止。这很可能会造成内存泄漏。 在我们基于groovy的spring web应用程序中,解决方案是使用基于注释的配置注册net.sf.ehcache.constructs.web.shutdownStener类,该类通过重写的
onStartup()
方法扩展WebApplicationInitializer,如下所示:

import net.sf.ehcache.constructs.web.ShutdownListener
import org.springframework.web.WebApplicationInitializer
...

public class CustomWebApplicationInitializer implements WebApplicationInitializer {
...

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    ...
    createContext(...)
    ...
}

private AnnotationConfigWebApplicationContext createContext(final Class... annotatedClasses) {
    AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext()
    context.register(annotatedClasses)
    context.register(ShutdownListener)
    return context
}
}