Tomcat7不等待异步请求完成关闭工作

时间:2018-12-05 19:29:04

标签: tomcat tomcat7

Tomcat版本:7.0.92

我在运行于Tomcat 7的应用程序中大量使用了异步API。 我的要求之一-允许当前所有正在处理的请求在终止之前完成其工作。

我为server.xml中的每个连接器设置了以下属性: asyncTimeout="40000" executorTerminationTimeoutMillis="60000"

此外,unloadDelay中的context.xml设置为60秒。

我在一项服务中睡了10秒钟,我向服务器发出了curl请求,然后立即请求关闭tomcat服务。

卷曲坐在那里大约10秒钟,然后从tomcat返回502

此外,在catalina.out中,我看到以下堆栈跟踪: INFO: Waiting for 1 instance(s) to be deallocated for Servlet [jersey-servlet] Dec 05, 2018 7:13:37 PM org.apache.catalina.connector.CoyoteAdapter checkRecycled INFO: Encountered a non-recycled request and recycled it forcedly. org.apache.catalina.connector.CoyoteAdapter$RecycleRequiredException at org.apache.catalina.connector.CoyoteAdapter.checkRecycled(CoyoteAdapter.java:634) at org.apache.coyote.http11.AbstractHttp11Processor.recycle(AbstractHttp11Processor.java:1909) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.release(Http11NioProtocol.java:220) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:720) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1775) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1734) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)

Encountered a non-recycled request and recycled it forcedly.

我认为这表明某些功能未按预期运行。似乎HTTP连接器已过早关闭。

1 个答案:

答案 0 :(得分:1)

仅出于完整性考虑:

根据问题作者https://bz.apache.org/bugzilla/show_bug.cgi?id=63003

提交的Tomcat错误

所描述的问题是由Tomcat不遵守unloadDelay上下文设置引起的,并且现在已经修复。