在starup期间阻止Tomcat缓存请求

时间:2015-11-30 14:57:54

标签: java tomcat caching

我在Tomcat中遇到了缓存请求的问题。每当我(重新)启动我的应用程序时,Tomcat就会在应用程序完全初始化之前开始缓存传入的请求。

有没有办法阻止Tomcat表现得像这样?我在-Element中找到了“cachingAllowed”选项,但我对此并不确定。

请告诉我们,如何在初始化所有内容之前阻止Tomcat缓存。我希望缓存请求的点是服务器启动完成时。

非常感谢,

马克

1 个答案:

答案 0 :(得分:1)

您描述的效果称为请求排队。默认情况下,Tomcat启动并侦听其配置的端口。当第一个请求进入时,它会触发部署和启动相应的Web应用程序。在应用程序启动之前进入的所有请求都将被阻止,并在应用程序启动完成时开始处理。

上面的描述略有简化,因为根据您的Tomcat连接器类型和配置,请求可以阻止和排队的区域不同:

  • 处理线程等待应用程序启动。限制由maxThreads控制。
  • 请求等待处理线程。限制由maxConnections控制。
  • 操作系统接受传入的TCP连接,但Tomcat尚未处理。这由acceptCount控制。 (顺便说一句:我把它设为0)

如上所述,参数的详细工作方式可能因连接器类型而异。

这是您可以控制限制和理解正在发生的事情的方法。我认为将acceptCount设置为0会使效果更好。

实际上,同样的问题和问题在:how to make http port to open after application startup in tomcat也没有真正的答案。它接缝这不是Tomcat的设计工作方式。我能想到的解决方案,但尚未尝试过:

  • 找到一种方法来启动带有禁用连接器的Tomcat(我没有找到任何参数......)并在启动后通过JMX启用它
  • 切换到从应用程序启动的嵌入式Tomcat或Jetty