Java Tomcat 7上的Spring Stack web应用程序未停止(需要强制终止)

Java Tomcat 7上的Spring Stack web应用程序未停止(需要强制终止),java,spring,tomcat,tomcat7,Java,Spring,Tomcat,Tomcat7,我经常遇到tomcat在被请求时不停止的问题,我不得不手动终止进程。。我使用的是标准的spring堆栈(JPA、MVC)。这种情况并不总是发生,大约70%的情况下。。我在Windows、OSX和Linux平台上都看到了这一点 有没有想过为什么会发生这样的事。。在下面的日志中,您将看到2个服务器日志条目,但从这个问题来看:似乎说这不是Tomcat的问题,所以它留下了软引用 有没有想过为什么这可以阻止tomcat关机 编辑:进一步的建议和分析-看起来apache HTTP客户端正在使用DateUti

我经常遇到tomcat在被请求时不停止的问题,我不得不手动终止进程。。我使用的是标准的spring堆栈(JPA、MVC)。这种情况并不总是发生,大约70%的情况下。。我在Windows、OSX和Linux平台上都看到了这一点

有没有想过为什么会发生这样的事。。在下面的日志中,您将看到2个服务器日志条目,但从这个问题来看:似乎说这不是Tomcat的问题,所以它留下了软引用

有没有想过为什么这可以阻止tomcat关机

编辑:进一步的建议和分析-看起来apache HTTP客户端正在使用DateUtils类,该类会依次创建一个ThreadLocal实例。。我们的代码使用HTTP客户端对外部服务进行分类。。。如果它驻留在Apache HTTP客户机中,那么这肯定是一个非常常见的问题,因为使用它调用外部HTTP端点并不少见

Threaddump低于日志输出

谢谢

伊恩

--线程转储-------

在 org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1.initialValue(DateUtils.java:220) 在 org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1.initialValue(DateUtils.java:219) 位于java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:160)
位于java.lang.ThreadLocal.get(ThreadLocal.java:150) org.apache.http.impl.cookie.DateUtils$DateFormatHolder.formatFor(DateUtils.java:239) 在 org.apache.http.impl.cookie.DateUtils.parseDate(DateUtils.java:156)
位于org.apache.http.impl.cookie.DateUtils.parseDate(DateUtils.java:114) 在 org.apache.http.impl.cookie.BasicExpiresHandler.parse(BasicExpiresHandler.java:61) 在 org.apache.http.impl.cookie.CookieSpecBase.parse(CookieSpecBase.java:93) 在 org.apache.http.impl.cookie.BestMatchSpec.parse(BestMatchSpec.java:135) 在 org.apache.http.client.protocol.ResponseProcessCookies.processCookies(ResponseProcessCookies.java:114) 在 org.apache.http.client.protocol.ResponseProcessCookies.process(ResponseProcessCookies.java:95) 在 org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:116) 在 org.apache.http.protocol.HttpRequestExecutor.postProcess(HttpRequestExecutor.java:342) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:462) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)


您的代码似乎使用了
[org.apache.http.impl.cookie.DateUtils$DateFormatHolder$]
。 告知HttpClient可能正在发布引用

因此,您需要查找代码,即使用HttpClient的代码,并确保清除contextDestroy上的任何
线程
或与HttpClient相关的资源


查看应用程序中使用HttpClient的线程,您应该验证这些线程在关机时是否正确停止。

关于这一点:谢谢-查看类,它确实创建了threadlocal,但是我没有使用这个类,而是使用了第三方库;我如何才能清理这些,使tomcat正常关闭?您告诉过第三方库正在使用HttpClient。但是根据你之前的评论,它看起来太像了,实际上是你自己在使用它。请注意,回答者已经告诉我们是HttpClient造成了这个问题。我认为您还应该查看应用程序中启动的线程,这些线程应该正确停止。(是的,它不在日志中,但可能)谢谢,我正在考虑从HttpClient迁移-当你说“正确停止”-我没有启动任何线程本身,但tomcat是..也许HttpClient需要更新?不知道这是不是一只虫子。您可以进一步询问httpclient用户列表:
-2013-01-04 09:18:33,189 DEBUG [http-bio-9999-exec-8] view.InternalResourceView (InternalResourceView.java:236) - Forwarding to resource [/WEB-INF/views/auth/login.jsp] in InternalResourceView 'auth/login'
2013-01-04 09:18:33,191 DEBUG [http-bio-9999-exec-8] servlet.FrameworkServlet (FrameworkServlet.java:913) - Successfully completed request
Jan 04, 2013 9:18:33 AM org.apache.catalina.core.StandardServer await
INFO: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
Jan 04, 2013 9:18:33 AM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-9999"]
Jan 04, 2013 9:18:33 AM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
Jan 04, 2013 9:18:33 AM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
2013-01-04 09:18:33,409 INFO  [localhost-startStop-2] support.AbstractApplicationContext (AbstractApplicationContext.java:1025) - Closing WebApplicationContext for namespace 'test-servlet': startup date [Thu Jan 03 17:56:22 GMT 2013]; parent: Root WebApplicationContext
2013-01-04 09:18:33,409 DEBUG [localhost-startStop-2] support.AbstractBeanFactory (AbstractBeanFactory.java:245) - Returning cached instance of singleton bean 'org.springframework.context.annotation.internalScheduledAnnotationProcessor'
2013-01-04 09:18:33,410 DEBUG [localhost-startStop-2] support.AbstractBeanFactory (AbstractBeanFactory.java:245) - Returning cached instance of singleton bean 'lifecycleProcessor'
2013-01-04 09:18:33,410 INFO  [localhost-startStop-2] support.DefaultSingletonBeanRegistry (DefaultSingletonBeanRegistry.java:433) - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@37f293d3: defining beans []; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@2f701b4e
log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.AnnotationConfigWebApplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Jan 04, 2013 9:18:33 AM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Jan 04, 2013 9:18:33 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1] (value [org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1@3f94bcde]) and a value of type [java.lang.ref.SoftReference] (value [java.lang.ref.SoftReference@3dfbb36e]) 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.
Jan 04, 2013 9:18:33 AM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-9999"]
Jan 04, 2013 9:18:33 AM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["ajp-bio-8009"]
Jan 04, 2013 9:18:33 AM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-9999"]
Jan 04, 2013 9:18:33 AM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]