Tomcat 7中的Memory Leak Grails应用程序

我有 生产环境 的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严重: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)

2 years ago

Web应用程序[/ services]似乎已启动名为 [net.sf.ehcache.CacheManager@37ce6a10] 的线程但未能将其停止 . 这很可能造成内存泄漏 . 在使用基于注释的配置的基于groovy的spring web应用程序中,解决方案是使用我们的类中的上下文注册net.sf.ehcache.constructs.web.ShutdownListener类,该类通过重写的 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
}
}

2 years ago

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

2 years ago

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

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 中查找错误 . 您可能需要启用其他日志记录才能找到此错误的根本原因 . Google for "SEVERE: Error listenerStart"并查找针对您的Tomcat版本的具体说明 .