【问题标题】:Start Tomcat's HTTP/HTTPS connector after all the applications are deployed部署所有应用程序后启动 Tomcat 的 HTTP/HTTPS 连接器
【发布时间】:2019-03-03 03:40:06
【问题描述】:

问题:

我们在 Tomcat 中有很多应用程序,每个应用程序都需要很长时间才能启动。

在此期间,如果您向 Tomcat 端口发出 HTTP 请求,它将等待所有应用程序完全启动。

由于我们有一个仅检查 Tomcat TCP 连接的负载均衡器,因此丢弃该 Tomcat 实例是不够聪明的。

想要的解决方案:

我想知道如何启动 Tomcat,以便它仅在所有应用程序完全部署后才开始侦听 HTTP 请求。这样,负载均衡器会注意到无法建立 TCP 连接,并且在此期间会丢弃该 Tomcat。

【问题讨论】:

  • tomcats热部署怎么样?请参阅tomcat.apache.org/tomcat-8.0-doc/deployer-howto.html“在正在运行的 Tomcat 服务器上部署”部分和以下部分。这将为您节省其他应用程序的时间。
  • 也可以在这里查看一些提示stackoverflow.com/a/25878204/3021395
  • 但是在这种情况下,如果有一个对一个应用程序的请求尚不可用,你会得到一个 404(因为我的负载均衡器只检查 TCP 连接)。
  • 那么在将您的应用程序分发到不同的 tomcat 以使它们彼此隔离时,可能会在前面使用带有 mod-proxy 的 apache http 可能会有所帮助。

标签: java tomcat


【解决方案1】:

tomcat wiki 对此有“操作方法”

How do I make Tomcat startup faster?

简而言之:

  • Web 应用配置
  • 删除不必要的 JAR
  • 从扫描中排除 JAR
  • 熵源配置
  • 启用与 startStopThreads 并行的 webapps 启动
  • 调整内存参数
  • 尽可能地修剪配置文件。 XML 解析并不便宜。解析的越少 - 事情就会越快。
  • 删除所有不需要的 Web 应用程序。 (所以删除所有与tomcat一起安装的Web应用程序)
  • 确保您的代码没有执行缓慢的操作。 (使用分析器)

【讨论】:

  • 就我而言,主要原因是当应用程序启动时,它从数据库中加载了大量数据(在 4 分钟内)。我们可以懒惰地做这个,但如果可能的话,我更喜欢使用 Tomcat 的连接器,这样我们就不必花时间懒惰地编码了。
  • 是否有一个额外的线程用于初始数据库加载?你也可以试试 bindOnInit 选项(见tomcat.apache.org/tomcat-7.0-doc/config/http.html)是否会改变一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 2012-12-10
  • 2023-03-27
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多