Tomcat 7中的Memory Leak Grails应用程序

时间:2014-03-09 18:21:59

标签: java tomcat grails memory-leaks

我有生产的grails(v2.1.5)应用程序,它工作正常,我可以毫无问题地重新部署,但我更新了应用程序(一些更改),当我部署新的战争时,我得到了内存泄漏错误,服务器启动但应用程序不起作用(浏览器中的页面只是一个页面),我试图重启实例,停止所有服务,....

我只能重新部署旧战争。我怎么能解决这个问题?

感谢。

错误:

  

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

     

2014年3月9日下午4:07:17 org.apache.catalina.core.StandardContext startInternal SEVERE:由于之前的错误导致Context []启动失败

     

2014年3月9日下午4:07:17 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE:Web应用程序[]注册了JDBC驱动程序[com.mysql.jdbc.Driver],但是当它无法取消注册时Web应用程序已停止。为了防止内存泄漏,JDBC驱动程序已被强制取消注册。

     

2014年3月9日下午4:07:17 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重:Web应用程序[]似乎已经启动了一个名为[Abandoned connection cleanup thread]但未能阻止它的线程。这很可能会造成内存泄漏。

     

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]的线程,但未能停下来。这很可能会造成内存泄漏。

3 个答案:

答案 0 :(得分:2)

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

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
}
}

答案 1 :(得分:1)

您发布的日志不包含问题的根。这不是内存泄漏。它也与Grails无关。任何java web-app都可以让tomcat记录下来。消息说,可以导致内存泄漏,但现在不是导致。 应该有另一段日志指向实际问题。

答案 2 :(得分:0)

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

  

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

     

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

错误“SEVERE:Error listenerStart”通常意味着servlet上下文侦听器(启动时运行)出现错误,阻止了webapp启动。

catalina.outlocalhost.<date>.log中查找错误。您可能需要启用其他日志记录才能找到此错误的根本原因。谷歌为“SEVERE:错误监听器启动”,并寻找您的Tomcat版本的具体说明。