【问题标题】:High latency with Tomcat first requestTomcat 首次请求的高延迟
【发布时间】:2013-06-23 13:47:56
【问题描述】:

我们有一个使用嵌入式 tomcat 版本 7.0.32 的应用程序。我正在观察一种关于延迟的特殊情况。

我正在对应用程序进行一些负载测试,我观察到对 tomcat 的第一个请求需要相当长的时间,例如速率约为 300+ 毫秒。后续请求大约需要 10-15 毫秒。

我正在使用 BIO 连接器。我知道使用了持久连接,因为我使用的是 HTTP 1.1,默认情况下它具有该支持。所以理想情况下,只创建 1 个 TCP 连接,并将所有请求推送到同一个连接上,直到保活超时结束。

我知道创建 TCP 连接会涉及一些成本,但差异很大。

知道是什么原因导致第一个请求和后续请求之间的延迟存在巨大差异,我们是否可以采取任何措施来减少/消除它。

谢谢,

维克拉姆

【问题讨论】:

  • 第一个请求是什么。正在尝试加载页面或进行任何身份验证或授权?
  • 或者是 JSP 被编译成 servlet,而 servlet 被编译成 .class 文件?您可以预编译您的 JSP 并查看它是否会消失。
  • 没有使用 JSP,只是普通的 http servlet。也没有数据库调用。只是一个带有 JSON 数据的简单帖子,servlet 读取数据并返回相同的请求数据。

标签: java http tcp tomcat7 keep-alive


【解决方案1】:

如果您使用 JSP,它们会被编译。

如果您要连接到数据库,则连接池之前可能是空的。 一般来说,如果你有延迟初始化的单例,第一个请求必须等待。

最重要的是,JIT 发挥了它的作用:所以在第一次请求之后,JIT 可能已经应用了一些优化。

如果是负载测试(或性能测试),我会忽略第一个请求/运行,因为这仍然是“热身”阶段。

更新

您可能会发现有关micro benchmark 的信息很有趣。

【讨论】:

  • 不使用 JSP,简单的 http servlet。这是一个带有 JSON 数据的简单 http 帖子。出于测试目的,我只是读取数据并将相同的数据作为响应的一部分发回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2018-07-08
相关资源
最近更新 更多