坚持Spring性能问题

时间:2012-04-01 12:32:45

标签: java performance spring hibernate tomcat

我有点陷入困境。我有一个Spring + Hibernate应用程序,在过去几天一直表现得非常奇怪。

通常,即使在调试模式下,它也会自动启动约15秒。

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

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

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

我完全陷入困境

3 个答案:

答案 0 :(得分:2)

您知道根据您的描述我们只能猜测。显然,如果您使用,后续构建的构建时间将揭示可能是哪些代码更改。如果您确定代码,诊断将更加简单。

它可能不是真正由代码更改引起的,而是由环境变化引起的。 E.g:

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

调查:

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

答案 1 :(得分:1)

我的猜测是你的数据库是这个的根本原因。

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

以下是一些提示:

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

答案 2 :(得分:0)

也许分析会帮助您获取更多信息。 JDK附带了一个很好的工具,名为jvisualvm(您可以在jdk安装的bin文件夹中找到它)。这几乎是自我解释。您可以连接到您的applciation并开始采样。