我一直在对 Tomcat 上的页面响应时间进行微优化,并且在几乎所有情况下,如果我一遍又一遍地刷新,我会看到50 毫秒的响应时间,但如果页面在一两秒内没有被点击,响应时间就会回升到500 毫秒。
无论本地,不是本地,APR,NIO,JIO,静态或动态响应(即提供静态文件或动态处理响应),我都看到了相同的行为。到目前为止,我还没有看到这种行为在 Tomcat 上没有发生(无论频率如何,它都是一致的低于 400 毫秒)。
我也使用 Visual VM 来查看是否有任何线索。
我认为这是某种保持活力,但是当我运行 Apache Bench 时,我得到了更快的响应时间(低于 50 毫秒)(显然是因为它经常点击它)。
那么如何在 Tomcat 中保持低延迟不经常点击的 URL?也许这个问题更适合ServerFault?
更新:我几乎肯定它是 Tomcat 6 的问题。我以为我已经在 Tomcat 7 上进行了测试,但我只是再次对其进行了测试并且没有问题(请参见下面的结果)。即使是最新的 Tomcat 6 仍然存在这个问题。
这是ab
Tomcat 6 的输出(注意最大值):
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 14 39 45.2 30 314
Waiting: 14 38 45.2 30 314
Total: 14 39 45.2 30 314
这是ab
Tomcat 7 的输出,请注意最大值:
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 25 38 8.8 37 67
Waiting: 25 37 8.7 36 66
Total: 25 38 8.8 37 67
Tomcat 版本是唯一的区别(相同的机器、相同的 JDK 等)。我确信最新的 Tomcat 6 会很好,但它在第一次请求时有类似的延迟。