Java 内存泄漏Grails在Tomcat7中的应用
我有一个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]的线程,但未能停止该线程。这很可能会造成内存泄漏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无关。任何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
}
}