【发布时间】:2016-09-15 09:49:54
【问题描述】:
我制作了一个由 Tomcat 托管的 Java Web 应用程序。可以在这个URL找到。
我遇到的问题是,当我第一次访问该页面时,它需要大约 10 秒,而每次访问之后,它只需要 100-500 毫秒。我想说速度的提高是由于浏览器缓存,但不是真的,当我刷新缓存时 (ctrl+shift+r) 我得到了同样的快速响应。
然后过了一段时间,大约 5 分钟后,我再次访问该页面,它又变慢了。
您可以通过将搜索参数值更改为例如:1050,1051,1052,2670,4000,2300,2200,对提供的 URL 进行一些测试。
我还发现一个有趣的事实是,无论有效载荷有多大(比较 1050 和 2300),时间几乎总是相同,大约9-10 秒。所以我假设像 Java Server 这样的东西必须准备好,这需要时间。
编辑:
我最初认为这可能与 Java/Tomcat 必须加载一些资源有关,然后在 +-3-5 分钟后再次加载,因为由于某种原因它卸载了它。但正如我在上面所写的,即使我更改了 URL 查询字符串(这会在执行期间导致不同的 SQL 查询),它也会再次加载很长时间。问题可能与数据库有关吗?我正在使用 MySQL。
EDIT2:
它更快的原因很可能是服务器缓存。我有 95% 的把握,那是因为我做了几个实验,比如在 2 台计算机上尝试它等(不,这不是浏览器缓存)。然后我意识到,如果它只有在缓存时才很快,那么实际的.executeQuery 代码行需要这么长时间。即使通过诸如WorkBench 之类的客户端的完全相同的请求只需要 0.285 秒,它也需要 10 秒。因此,我将尝试使用PreparedStatement 或进一步实验。
【问题讨论】:
-
您的应用程序是否托管在 Tomcat 实例上,该实例服务于多个 Web 应用程序(不仅仅是您的)? Tomcat 可能会在没有人使用时关闭您的应用程序(以节省资源),因此当您下次访问它时需要一些时间重新加载。
-
嗯,是的,上面有一个 tomcat 服务器和多个应用程序。有没有办法让它保持打开并为每个应用程序做好准备?
-
我不知道您是否可以保持打开状态,但您可以询问您的网络托管服务提供商。也许这根本不是问题。
-
我自己在 AWS 上托管它。嗯,很遗憾我对此没有任何答案或至少没有指导。
-
尝试使用浏览器调试它(按 F12 并看到请求等)。这样您就可以知道当页面加载时间过长时浏览器是否会进行一些额外的服务器访问等