2013-06-26 74 views
0

我们有一个应用程序正在使用嵌入式tomcat版本7.0.32。我正在观察延迟方面的特殊情况。Tomcat第一次请求的高延迟

我正在做一些应用程序的负载测试,我所观察到的是对tomcat的第一次请求需要相当多的时间,例如,率大约300+毫秒。随后的请求大约需要10-15ms。

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

我得到创建一个TCP连接会涉及一些成本,但差别只是很大。

任何想法可能会导致第一次和后续请求之间的延迟的巨大差异,我们可以做任何事情来减少/消除它。

感谢,

维克拉姆

+0

什么是第一个请求。正试图加载一个页面或做任何认证或授权? – karthick

+3

或者JSP可以编译成servlet,servlet可以编译成.class文件?您可以预编译您的JSP并查看它是否消失。 – duffymo

+0

没有使用JSP,只是普通的http servlets。没有数据库调用。用JSON数据做一个简单的帖子,servlet读取数据并用相同的请求数据回应。 – Vicky

回答

0

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

如果您正在连接到数据库,则连接池可能在之前为空。 一般来说,如果你有懒惰初始化的单例,第一个请求必须等待。在此之上,JIT发挥其作用:因此,在第一个请求之后,JIT可能应用了一些优化。

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

更新

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

+0

没有使用JSP,简单的http servlet。它是一个带有JSON数据的简单的http post。出于测试目的,我只是读取数据并将相同的数据作为响应的一部分发回。 – Vicky

+0

我在基准答案中添加了一个链接。 – Beryllium