10

stopundeploy/redeploy基于Spring framework 3.0.5Web 应用程序的以下错误已登录Tomcat7's catalina.out

SEVERE: The web application [/nomination##1.0-qa] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@4f43af8f]) and a value of type [org.springframework.security.core.context.SecurityContextImpl] (value [org.springframework.security.core.context.SecurityContextImpl@ffffffff: Null authentication]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.

我最初考虑实施ServletContextListenerclose()那里的上下文。但是,发现ContextLoaderListener哪些工具ServletContextListener是这样设置的web.xml

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

来自 Javadocs:

**contextDestroyed**

public void contextDestroyed(ServletContextEvent event)
Close the root web application context.
Specified by:
contextDestroyed in interface ServletContextListener

所以,我的问题是为什么 ThreadLocal 没有被完全释放ContextLoaderListener.contextDestroyed()

我们遇到了PermGen错误,在调查时发现了这一点。有几个地方有类似下面的代码:

ApplicationContext context = WebApplicationContextUtils
            .getWebApplicationContext(se.getSession().getServletContext());

MyBeanClass x = context.getBean(
            "myBean", MyBeanClass.class);
x.someMethod(); 

我想知道上面的代码片段是否正在停止干净关机?任何指针将不胜感激。

4

1 回答 1

0

hotdeploy 有很多问题需要注意:

1-取消注册数据库驱动程序,请参见此处

2-关闭多任务应用程序中的任务:您可以在开发模式下将重启延迟近 1 小时。

3-Kill context of spring:你在上面做了,但注意不要从 XML 中导入 XML。

4-杀死JVM内存中存在的缓存对象:制作小对象,您是否在构造函数中初始化bean?将其更改为 none 构造函数以保持在方法范围内杀死它们!类中调用bean的方法有多少?如果许多方法调用 bean 在从作用域中出来后不期望 java 杀死对象,jvm 将保留它以提高性能..,所以保持你的类小!

你的代码怎么样?您是否在循环中声明变量?使用后你是 =null 列表还是对象?

5-您可以增加tomcat的启动时间和停止时间。

还可以将 rebel 或 springboot 项目视为 helper 。

于 2014-06-13T08:13:19.203 回答