[转]Java几款性能分析工具的对比

2019-03-27 01:01|来源: 网路

在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件下的性能问题。理论上,增加对应用程序的负载会使性能有所下降,但是我认为性能下降的比率 远远高于负载的增加,同时我也发现,性能可以通过改变应用程序的逻辑来提升。为了更详细地了解这一点,我们需要做一些性能分析,这时,我们自然就要用到一 些性能分析工具。Java有许多的性能分析工具,可以帮助我们弄清楚这个问题,但是我们应该使用哪一款工具呢?
为了做出正确的选择,我列出性能分析应满足一些最低要求:
1.        必须包括对应用程序的类、方法及时间的监测
2.        必须包括对内存的监测
3.        必须具有易用性
我配置了一个使用RESTful接口的Spring应用程序,使用MongoDB作为数据存储,还使用Solr搜索,并在Tomcat服务器上部署。


参考工具:
1.VisualVM
VisualVM是一个资源分析工具,一直从JDK 6更新到7,它默认内存和CPU的监视,它可以告诉你哪个类和方法消耗资源,但它不会显示代码流程。


2.JProfiler
JProfiler很容易安装,并且通过向导,你可以选择应用服务器用来运行应用程序。我不得不选择使用JPofiler应用服务器的主目录,以及向导生 成的一个单独的启动脚本。然后运行服务器。在监听会话的过程中,它会提供几个选项,它可以记录内存的使用和CPU的使用率。在查看CPU使用率的同时,可 以看到执行路径。这让我看到应用程序大部分时间都花在请求上。我们可以将IntelliJ插件安装到IDE上,那么运行JProfiler会更加便利。比 如,可以直接帮我启动Tomcat。


3.YourKit
YourKit是我在另一个项目中偶然发现的一款性能分析工具,它的安装很简单。安装时有一个选项,可以安装一个插件到我的IDE。安装后,运行应用程 序,使用该插件,它会自动连接到YourKit。它有一个漂亮的用户界面可以查看到内存和CPU的监测,同时也可以看到请求的执行路径。


4.JProbe
我刚开始创建JProbe时遇到点困难。安装并不是直接完成,我需要对它进行配置。它采用了类似JProfiler一样的设置。它会在你的Tomcat目 录中生成启动脚本,可以通过脚本启动服务器并监听会话。它的界面包含有按钮和表格,其中可以看到内存的使用,但无法在进程中找到执行路径。


5.Spring Insight
听到TC Server有Spring Insight监控界面,于是我兴奋地尝试了一下。安装完成后,并设置成TC Server的开发者版,然后部署应用程序在TC Server上。我查看Insight界面,它可以很好的监视类和方法,并能看到完成这个方法用了多少时间。我还能看到输入参数值,以及返回值。由于我的 应用程序是基于Spring的,Spring Insight能够提供非常有用的数据。TC Server插件在IDE上的配置与Tomcat的配置类似。SpringSource工具套件就自带Spring Insight。


结  论
看到这五款性能分析工具,我可以肯定地说,它们都非常不错。如果你有基于Spring的应用程序,那么选择Spring Insight显然是最佳的。它一直是免费的,但你需要部署你的应用在TC Server上。
如果你想监听本地和远程的进程,我会选择JProfiler或YourKit.这两个也可以帮助Spring Insight来监测、找到性能瓶颈。
JProfiler和YourKit已经能满足我的上述要求。JProfiler、YourKit和Spring Insight都可以跟踪应用程序的类和方法的流向。JProfiler和YourKit可以显示内存使用情况。虽然Spring Insight不可以显示内存使用情况,但它可以很好的显示吞吐量的趋势。这三款性能分析工具功能很清楚,不混乱,而且容易使用。最后,他们都有自己的 IDE插件。希望本文能帮助你做出正确的选择。

 

原文出处:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4068778

 

 


转自:http://www.cnblogs.com/yejg1212/archive/2013/02/27/2934543

相关问答

更多
  • 测试工具:junit(继承TestCase类,用里面的几个方法进行测试即可) 代码管理工具:SVN或者CVS 性能分析:用Intel性能分析工具(还可以分析你的算法的执行效率等) jprofiler是用来做Hibernate中的语句的分析的。 设计工具:UML或者StartUML等其他统一语言管理工具 反编译工具:具体忘记了,你自己上网查一查了。
  • 有 一 个 公 司 做 的 还 是 不 错 的 , 晓 明 科 技 , 他 们 很 多 成 功 的 案 例 , 你 可 以 到 他 们 的 公 司 去 看 看 , 很 多 大 公 司 也 都 是 跟 这 家 公 司 合 作 的 , 很 不 错 的
  • 日志空间商放出来没 我们都是用ftp工具查看的
  • 1) 静态代码分析 :主要通过一些既有的代码编写规则,来分析目前代码是否存在一些安全漏洞或待优化的问题,可以通过自己的实际情况来对检查规则做相应的调整。 (2) 任务管理器 :快捷键:Ctrl+Shift+Esc ,我们通过使用Processes 和Performance 标签来从整体上进行判断,主要是通过观察我们软件的进程在执行过程中发生的CPU、内存、硬盘读写等指标的变化,因为其不具有日志记录功能,需要实时性地观察和多次尝试,目的就是在大方向上判断是否存在性能问题。 (3) 性能监视器 :Start - ...
  • 如果没有完全加载hprof文件,并且之后应用一些交叉引用,hprof文件的格式不太适合。 但是,您可以跳过hprof转储,通过使用包含在JDK软件包中的jmap , jstack和visualvm从运行中的VM获取基本信息。 典型的内存泄漏例如应该已经从jmap堆直方图中可见,因为您可以通过查看特定类的实例数来猜测产生或保留对象的位置。 hprof files have a format that doesn't really work well without loading it fully and t ...
  • 通常,我使用的是ParseHeapDump.sh包含在Eclipse Memory Analyzer中,并在此处描述,并且我将其加载到我们更加强化的服务器上(通过linux .zip发行版下载并复制)。 shell脚本需要比GUI解析堆更少的资源,另外您可以使用更多资源在您的服务器上运行它(您可以通过添加如-vmargs -Xmx40g -XX:-UseGCOverheadLimit来分配更多资源脚本的最后一行,例如,该文件的最后一行在修改后可能看起来像这样 ./MemoryAnalyzer -consol ...
  • 单独的一组线程转储不会太有助于找到根本原因。 诀窍在于每个间隔5秒间隔采用4组或5组线程转储。 所以最后你会有一个单一的日志文件,在应用服务器上有大约20 - 25秒的动作值。 你想检查的是当一个卡住的线程或长时间运行的事务发生时,所有的线程转储将显示一个线程id在你的java堆栈跟踪的同一行。 简单来说,交易(在EJB或数据库中说)跨越多个线程转储,因此需要更多的调查。 现在当你通过武士跑步(我没有使用TDA自己),它会突出显示这些红色,所以你可以快速点击它,并得到显示问题的线。 在这里看一个例子。 看看 ...
  • 我做了一些测试,看看它的规模如何。 术语“比例”通常用于指代服务器,它必须“扩展”到许多同时使用的用户。 你会推荐什么性能分析工具/插件来在设备和桌面上运行分析来比较苹果和苹果? 据我所知,没有这样的工具。 如果您觉得您的Android代码运行效率不够高,请使用Traceview查看您的热点位置。 I did some testing to see how well it scales. The term "scales" is usually used to refer to servers, that ...
  • VisualVM可以完成这项工作。 打开hprof和tdump文件。 仍然tdump文件仅保留文本,但使用hprof文件可以进行一些分析。 VisualVM can do the job. Open hprof and tdump files. Still tdump files remain text only, but with hprof files some analysis can be done.
  • 试试SAP内存分析器工具,它也有一个eclipse 插件 。 此工具在处理转储文件时在磁盘上创建索引文件,并且所需内存比其他选项少得多。 我很确定它支持更新的IBM JRE。 话虽如此 - 使用1.5 GB转储文件,您可能没有其他选择,只能运行64位JVM来分析此文件 - 我通常估计大小为n的堆转储文件需要使用标准打开5 * n内存工具,以及使用MAT打开的3 * n内存,但您的milage将根据转储实际包含的内容而有所不同。 Try the SAP memory analyzer tool, which ...