我有生产的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]的线程,但未能停下来。这很可能会造成内存泄漏。
答案 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.out
和localhost.<date>.log
中查找错误。您可能需要启用其他日志记录才能找到此错误的根本原因。谷歌为“SEVERE:错误监听器启动”,并寻找您的Tomcat版本的具体说明。