我最近将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 更新推进到生产环境,所以我感谢您的任何指示,
Steve
性能下降可能有多种原因。所以我建议包括javamelody-spring-boot-启动器 https://github.com/javamelody/javamelody/wiki/SpringBootStarter在您的应用程序中。
这样您可能会发现最长的 http 或 sql 请求之间的性能下降。
也许更重要的是,根据负载测试或生产过程中的统计数据,您可能会发现哪些 http 和 sql 请求应该改进以提高整体性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)