【问题标题】:Stuck on a Spring performance issue卡在 Spring 性能问题上
【发布时间】:2012-04-01 12:32:45
【问题描述】:

我有点卡在一个问题上。我有一个 Spring + Hibernate 应用程序,最近几天它的行为非常奇怪。

通常,即使在调试模式下,它也会引导大约 15 秒。

几天后,没有显示任何重大错误或问题,它开始运行两次,如果不是慢三倍的话。

我认为问题可能出在 Tomcat 中,但即使我运行了我编写的一系列单元测试,它们的速度也非常慢(我们说的是 8 秒以上的测试 + 20 秒的初始上下文引导) .我使用本地 PostgreSQL 数据库进行测试,这通常不是那么糟糕(大约一秒钟的测试)

我被困住了。我知道我做的最后一件事是在我的 @Controller 类上添加对 @Transactional 的支持。这可能是原因吗?我怀疑,因为当我将事务修改部署到稳定服务器并重新启动它时,它的运行速度和以前一样快。

我完全被卡住了

【问题讨论】:

    标签: java performance spring hibernate tomcat


    【解决方案1】:

    您知道,根据您的描述,我们只能猜测。显然,如果您使用,后续构建的构建时间将揭示可能是哪个代码更改的原因。如果识别出代码,诊断就会简单很多。

    这可能不是真正由代码更改引起的,而是由环境更改引起的。例如:

    • Spring 在引导程序中获取一些外部资源(XML 模式、DTD 等)
    • 存在一些额外的网络开销(路由器/交换机重新配置、防火墙)
    • 数据库碎片化或速度慢。尝试吸尘

    调查:

    • 在引导期间捕获少量堆栈跟踪。不需要全面的分析,我敢打赌只有一个阻塞/等待操作会减慢速度
    • 尽可能启用每个日志记录语句。 每个。调查您的应用程序的哪些部分运行缓慢。

    【讨论】:

      【解决方案2】:

      我的猜测是您的数据库是造成这种情况的根本原因。

      可能由于数据大小增长、架构更改等原因,您的某些查询花费的时间比过去要长。

      这里有一些提示:

      • 尝试检查启动日志以查看似乎较慢的内容。
      • 您能否尝试启动旧版本的应用程序,看看它是否更快?
      • 您现在能看出哪些测试速度较慢吗?

      【讨论】:

        【解决方案3】:

        也许分析会帮助您获得更多信息。 JDK 附带了一个不错的工具,称为 jvisualvm(您可以在 jdk 安装的 bin 文件夹中找到它)。这几乎是不言自明的。您可以连接到您的应用程序并开始采样。

        【讨论】:

          猜你喜欢
          • 2011-08-22
          • 2011-07-11
          • 2019-10-19
          • 1970-01-01
          • 2019-11-10
          • 2020-09-05
          • 1970-01-01
          • 1970-01-01
          • 2013-07-31
          相关资源
          最近更新 更多