【发布时间】:2019-11-10 16:44:52
【问题描述】:
我最近将 Web 应用程序中使用的 Spring Boot 版本从 1.5 版更新到了 2.1 版。当我针对它运行负载测试时,我的运行时间从 25 分钟变为 35 分钟。
我知道这是一个宽泛的问题,但是有没有人知道为什么在升级 Spring Boot 库后应用程序会如此显着变慢?
编辑:在花费大量时间尝试了解分析器输出之后,问题似乎出在与数据库的通信中。 Mariadb JDBC 驱动程序调用 java.io.FilterInputStream.read 从数据库中取回数据。根据分析器的说法,在 Spring Boot 2 中运行时,应用程序在此方法中花费的时间几乎是在 Spring Boot 1 中的两倍(两者都使用 Hikari)。相同的应用程序。相同的数据库。相同的 mariadb 驱动程序。只是 Spring 的版本发生了变化,无论 Spring 引入了什么(比如 tomcat 9 而不是 8,或者 hibernate 5.3 而不是 hibernate 5.0)
编辑#2:我做了更多的测试。我用降级的 Tomcat (8.5.37) 运行 Spring Boot 2.1,性能仍然很差,所以 Tomcat 似乎不是问题。接下来,我使用升级后的 Hibernate (5.3.10) 运行 Spring Boot 1.5,性能仍然很好,所以 Hibernate 似乎也不是问题。除了 Spring Boot 本身之外,这并没有留下太多的东西,而对于我来说,为什么 java.io 中的一个类在一个框架下会比另一个框架下花费更长的时间对我来说仍然是一个完全的谜。
这使我无法将 Spring Boot 更新推进到生产中,因此我感谢您的任何指点,
史蒂夫
【问题讨论】:
-
设置了哪些属性?代码有多复杂?后端是什么?有很多事情可能导致这种情况
-
25 分钟的测试已经很庞大了。只有完整的集成测试才会花费这么多时间。
-
它们是完整的集成测试,旨在展示应用程序在数千名用户中的表现,这就是运行需要一段时间的原因。这是一个使用 Tiles 和 JSP 页面作为前端的 Spring MVC 项目。我不会认为它是一个特别复杂的应用程序,所以当性能测试下降这么多时,我感到非常惊讶。我应该检查任何特定的属性吗?特别是从 Spring Boot 1.5 到 2.1 的变化?
标签: hibernate spring-boot tomcat