基于Java的Web应用程序性能分析工具

3
我们正在开发一个基于Struts2 + Spring 3.x + Hibernate 3.x的Web应用程序。我们考虑使用优秀的分析工具来避免任何潜在问题。
我对这个领域还很新,所以在做一些研究时找到了以下两个候选工具:
- Jprofiler - VisualVM
请提供您对这两个工具的反馈,或者如果有其他更好的候选工具,请建议。 另外,我还有几个疑问。
1. 在项目仍处于中期的情况下,使用分析工具是否相关? 2. 由于我们最初将在开发系统上使用该工具,因此我认为这并不是生产环境的副本,而且可能存在许多超出生产范围的问题。 3. 操作系统在分析结果上会有多大影响,因为大多数开发机将基于Windows,而预发布和生产环境将基于Linux?
请提供您宝贵的反馈。
5个回答

3

使用JProfiler进行开发。我已经使用了3年,特别是针对CPU性能分析方面,它真的很棒。而VisualVM无法提供与JProfile相同级别的深入分析。它能识别J2EE组件,并且还能在流程中给出确切的SQL查询语句。这非常重要,根据我的经验,95%的性能问题都来自于不负责任和不必要的数据库查询。

因为您正在使用Hibernate,性能分析将帮助您确定何时启用延迟加载、对象、查询和关联缓存。

回答您的其他问题:

  1. 无论您的项目处于何种阶段,如果您感觉其性能不佳,性能分析都是相关的。不要延迟它,因为如果核心组件设计存在问题,这些问题有可能会扩散到整个应用程序,并且难以在后期修复。

  2. duffymo的回答。

  3. 差异很大。我们的Linux机器通常比Windows机器快得多且响应更快。但正如duffymo所回答的,性能分析可提供热点分析及每个组件和方法占用时间的百分比。在性能分析过程中,应用程序类的熔断至少比正常情况慢50%(这是我的JProfiler经验)。


0

VisualVM是一个非常好的工具。难以想象这么好的东西竟然与Sun/Oracle的JDK下载捆绑在一起。我建议使用JDK 6及以上版本。你只需要获取应用程序的PID并将其提供给VisualVM,它就会完成剩下的工作。

以下是对你的问题的回答:

在项目仍处于中间阶段时使用分析器是否相关。

我不确定你的意思是什么。我假设你是在问分析器对性能的负面影响。你正在检查相对效果而不是绝对数字。你基准性能,进行更改,然后重新测量。分析器对两者都是相同的。

由于我们最初将在开发系统上使用它,因此我认为它不是生产的复制品,并且可能存在许多超出生产范围的问题。

你只能了解你所测量的系统。如果开发与生产有很大的不同,那么你所能做的就是相对变化的效果,而不是绝对值。

操作系统在性能分析结果中能产生多大的差异,因为大部分开发机器都是基于Windows,而暂存和生产环境则是基于Linux。如果你担心这个问题,可以在Windows和Linux上进行基准测试。我猜差别微乎其微,但一次测量将证实或否认这一点。

0
如果您使用 Eclipse,并从 Eclipse 启动开发服务器,则可以查看 Eclipse TPTP

@TPTP可能是一个不错的选择,但据我在大多数论坛和文章中所读到的,它的设置过程比较复杂..我更愿意花更多时间在性能分析上,而不是配置系统。 - Umesh Awasthi
@umesh awasthi:我无法将其与其他工具进行比较,但是如果我没记错的话,这不是什么大问题。(一年前) - Ralph
我说的只是我看到的,老实说我自己没有用过。一定会尝试一下。 - Umesh Awasthi

0

我对这两个没有任何经验,但我们运行了很多Java Web应用程序(包括Servlet容器和游戏服务器平台)。 我们的开发和生产服务器是Linux和BSD混合,而我们的开发人员使用各种操作系统:Linux、MacOS、Windows等。

对于我们所有的分析需求,我们使用Yourkit(http://www.yourkit.com/)。 我们通常不会做太多分析工作来识别瓶颈等问题(尽管我们有一些这样的经验),但它已经成为一个非常好的工具,用于查找死锁、内存泄漏、permgen问题等。

我们在生产服务器上以低影响模式全天候运行它,以便在必要时获取快照,并在开发的各个阶段都使用它。


0

我在NetBeans内置的分析器方面有非常好的经验。

VisualVM中的分析器是NetBeans分析器的简化版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接