【问题标题】:First response is slow Tomcat第一反应是慢Tomcat
【发布时间】: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 并看到请求等)。这样您就可以知道当页面加载时间过长时浏览器是否会进行一些额外的服务器访问等

标签: java mysql tomcat


【解决方案1】:

内容大小为 200kB。你需要在前端和后端进行优化。

主要问题出在您的后端。检查为什么需要这么长时间。

您可以在前端启用 gzip 压缩。查看 tomcat 文档以了解如何操作。这将减少下载的大小。

由于浏览器缓存,第二次可能对您来说更快。 检查 Firebug 中的响应代码,如果响应为 304,则将其缓存。响应 200 表示已从服务器加载。

【讨论】:

  • 正如我之前所说,第二次速度很快,不是因为浏览器缓存。我尝试了一个实验,我提出了一个请求,然后我的同事在同一个 url 上提出了一个请求,它是立竿见影的。正如我还提到的,相同的 10 秒即使有效载荷很小或很大,也无所谓。所以不,这不是有效载荷大小。虽然感谢您的尝试。
  • 使用分析器分析瓶颈。可能有许多不同的问题可能会改变进程时间,例如 jpa 缓存、内存使用、未正确配置的数据库连接池.....
  • 可能是服务器缓存。
  • 服务器不应该缓存你的请求。
  • 如果我访问一个特定的 url,它显然会发生或一定会发生什么,然后我等待 10 秒直到它加载,然后我将相同的 url 发送给我的同事,他可以立即看到它。然后我给他发送一个不同的 url,他必须等待 10 秒,然后我尝试访问那个,它会立即加载。这意味着它必须缓存在服务器上,或者数据库连接保持打开状态或该区域中的某些东西。
猜你喜欢
  • 2019-05-07
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多