Reddit网友:Springboot升级后性能下降


我最近为我的团队进行了 springbootJava 从 2.7 到 3.1.2 的升级,以及从 Java 11 到 Java 17 的升级。这次升级后,我们发现性能非常糟糕。我在前后也进行了性能测试。我们的一个 API 的 p99 延迟约为 2 秒,但升级后跃升至 5.5-6 秒。我们还升级了tomcat版本到10.1.X

你们对此有什么想法吗?有没有人在升级后也遇到过这种性能下降的情况。

讨论:

  • 我们对两个 API 进行了性能测试,这两个 API 都进行了降级。
  • 虽然我怀疑 spring 是罪魁祸首,但由于许多项目都使用它,而且这种降级会出现在科技新闻中,但这并非不可能。您还可以检查您的配置文件。也许Spring正在诠释一些不同的东西。
  • 你使用什么持久层?也许您可以检查查询的执行时间。
    进一步检查要点:
    - 您是否禁用了延迟初始化?
    - 自升级以来是否启用了任何其他弹簧选项(即使是默认情况下)?
  • 您需要分析您的应用程序并查看所有时间都花在哪里了。分析应用程序的旧版本与新版本也很有用。
  • 您做了什么来识别瓶颈?您启用了任何分析吗?也许编写自定义注释来跟踪应用程序层?我同意这与 spring 和 java 升级直接相关。确保准确指出真正的时间损失,以便我们提出更多建议。
  • 听起来像是 Hibernate 问题(Spring Boot 升级也更新了所有依赖项), Spring Data默认随 Hibernate 一起提供,升级到 Spring Boot 3.0 后,幕后可能会发生变化:我们还遇到了 Hibernate/JPA 的问题。参数化查询导致执行时间更长(从毫秒到约 30 秒),我们将其更改为 Criteria。
  • 也许您应该升级到可以利用虚拟线程的 Java 21。
  • 我发现在 Spring Boot 中覆盖核心依赖项的各个版本可能会产生奇怪的效果。一般来说,我只会在安全问题需要时才这样做。分析应用程序,您可能会发现一些愚蠢的事情,例如阻止设置某些线程池大小的配置名称更改。(问我怎么知道的)
  • 我强烈建议运行 APM,例如 New Relic、Dynatrace 等...它们会非常快速地向您显示慢点,并且还允许您比较任何版本或更新的前后情况。