`
talentluke
  • 浏览: 604437 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java常用的性能分析工具记

 
阅读更多

1.VisualVM

 

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

 

2.JProfiler

 

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

4.JProbe

 

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

 

 

JProbe提供了三种类型的分析:

  • 内存分析,使开发人员可以发现和解决Java内存泄露和对象循环,以确保最佳的方案效率和稳定性。
  • 性能分析,使开发人员可以识别和解决Java的瓶颈,死锁,以确保最佳的性能和可扩展性方案。
  • l覆盖分析,使开发人员在单元测试,以确定关联代码执行的线路,以确保测试范围和程序的正确性。
  • JProbe还提供一个Eclipse插件,提供了在Eclipse Java IDE内智能代码性能分析和解决问题。

     

    JProbe让您可以

  • 实现一个可靠的,系统的工作流程,全面验证并提供优化的代码
  • 轻松跟踪性能增强的代码变化,从生成到生成的质量的提高
  • 利用自动性能分析和度量报告,确保及时审查和修正
  • 在生成过程中诊断问题通过调优提高生产力问题
  • 避免不必要的,昂贵的添置硬件来解决性能问题
  • 通过Eclipse插件鼓励自动化内存测试和代码优化最佳实践
  • 启用JProbe跨应用程序生命周期开发和整合阶段主动的性能管理,作为Quest Java技术和门户应用管理的一部分,为企业预生产开发团队提供深层次的性能,内存和覆盖分析能力。通过一个统一,直观的控制台,JProbe提供了三种强大的分析工具:

 

JProbe Memory - 内存分析工具可以帮助您快速找出和诊断内存泄漏和过剩垃圾收集的根本原因。它可以帮助您快速找到并修复低效的代码,创建游离对象(挥之不去的引用)和导致内存不足系统崩溃和较低性能的对象循环。

 

JProbe Performance - 性能分析工具可以帮助你快速找出和诊断代码瓶颈和线程竞争背后的根本原因。它可以帮助您快速找到产生瓶颈,死锁,陷入僵局的线程,并修复低效的代码,从而避免导致整体性能缓慢和可扩展性瘫痪。

 

JProbe Coverage - 覆盖分析工具通过精确测量的陈述和已经行使条件可以帮助您找到在开发早期未经测试的应用程序代码,从而更容易评估测试运行的可靠性和准确性。

 

自动化

 

JProbe允许在夜间构建过程分析内存,性能和覆盖。 JProbe利用ANT(或Maven)构建任务,JUnit测试脚本和一个称为触发器的独特功能来实现自动化分析。触发器是JProbe自动化的基石,处理更精细的既简单又复杂的自动化活动。通过启用触发器,您免去了应用程序代码生成过程中插入额外的控制代码进行运行测试,它可以帮助您节省宝贵的时间和预留预算分析。

 

3.YourKit

 

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

 

5.Spring Insight

 

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

6.jconsole

方便不用下载安装,在JDK的bin目录下就有,如图。

 

7.JMeterJMeter

可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。 JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。你可 以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。

 

8.JRockit Mission Control

Mission ControlBEA JRockit JVM自带的一组以极低的开销来监控、管理和分析生产环境中的应用程序的工具。它包括三个独立的应用程序:内存泄漏监测器(Memory Leak Detector)、JVM运行时分析器(Runtime Analyzer)和管理控制台(Management Console)。BEAJRockit R26版本就开始捆绑这个工具套件,目前最新的版本是3.0。最近我们使用其中的Runtime Analyzer对国内某著名行业解决方案进行性分析和调优。

JRockit Runtime AnalyzerJRA)是一个JVM分析器,是一个随需应变的“动态记录器”。它记录了Java应用程序和JVM在一段预定的时间内的详细记录。然后通过JRA应用程序对记录下来的文件进行离线分析。所记录的数据包括对方法的调用跟踪、错误的同步、锁定的分析,还有垃圾收集统计信息,优化决策以及对象统计信息和其他重要的应用程序/JVM行为。它的目的是让JRockit开发人员能够找到良好的方法来基于现实应用程序优化JVM,对于帮助客户在生产和开发环境中解决问题十分有用。

 

在本次项目中,操作|A和操作B的百人并发脚本执行完成的时间接近两分钟,因此我们使用JRA进行了2分钟(120)的记录。在GC常规信息中,我们发现在短短两分钟时间内,垃圾收集的总数高达365次,而由此造成的暂停时间有42.5秒之多。也就是说35%的执行时间是在做垃圾收集。
 
因为最大堆尺寸已经设置成1024M,对于32位操作系统上的Java应用已经是足够大了(在IA32构架下,由于操作系统给每个进程的最大内存寻址空间为1.8G,因此最大堆尺寸不能超过1.8G),因此堆的大小并不是造成频繁垃圾收集的原因。那么在高并发度的场景下,可能的影响因素很可能是Nursery大小。
 
Nursery 也称为新代,是指运行分代式垃圾收集器时,在堆中分配新对象的可用块区域。 Nursery 变满时,会在新垃圾收集中单独对其进行垃圾收集。Nursery 大小决定了新收集的频率和持续时间。较大 Nursery 会降低收集的频率,但是会稍微增加每个新收集的持续时间。Nursery 之所以具有价值,是因为 Java 应用程序中的大多数对象都是在新代中夭亡的。与收集整个堆相比,应首选从新空间中收集垃圾,因为该收集过程的开销更低,而且在触发收集时,新空间中的大多数对象均已死亡。在新收集过程中,JVM 首先确定 Nursery 中的哪些对象是活动的,此后将它们提升到旧空间,并释放 Nursery,供分配新的小对象使用
 
Nursery的默认缺省值是10M/CPU,对于我们Clovertown服务器来说,只有20M。由于出现频繁收集的情况,那么我们推断是由于Nursery的默认值太低的原因。一方面在高并发用户的场景下,肯定是有大量的新对象产生,那么Nursery的空闲空间很容易就被耗尽。因此Nursery发生垃圾收集频率就会比较高。另一方面更短的垃圾收集间隔会使得新对象在Nursery的存活率提高因为很多新对象可能还没来得及使用完毕就已经发生垃圾收集。这样更多的对象会被提升到旧代,使得旧代的对象也会急剧增加,从而使得旧代发生垃圾收集的频率也增加。
 
因为JRockit JVM可以使用-Xns:<size>来设置Nursery的尺寸,我们要在保证垃圾回收停顿时间(garbage collection-pause)尽可能短的同时,尽量加大Nursery的尺寸,这在创建了大量的临时对象时尤其重要。推荐值是最大堆尺寸的10%,因此我们在JRockit的运行时参数上添加了 –Xns100m。再次运行脚本后,JRA收集的信息显示GC暂停时间骤降到15.3s,次数也有所减少,降到296
 
Nursery大小
20M(默认值)
100M
GC暂停时间
42.5s
15.3s
垃圾收集的总数
365
296
平均暂停时间
116ms
52ms
 
此外,我们从方法信息中可以看到调用次数最多耗时间最长的两个方法分别是jrockit.vm.Locks.monitorEnterSecondStagecom.ABC.StateManager.makeState两个方法。展开前置任务后发现调用这两个方法最多的方法是com.ABC.SqlQueryAction.query。而jrockit.vm.Locks.monitorEnterSecondStage显然是JRockit实现锁机制的特定的API。因此我们怀疑是对数据库的操作时有资源互斥的现象发现。
 
考虑到高并发用户的场景下,对数据库操作的并发度也很高,因此对数据库连接的争用比较激烈。我们察看了一下当时WebLogic JDBC的配置,发现connection pool的大小只是缺省值20,相对来说偏小了,对性能会有一定的影响。因此我们增大connection pool的大小到100。重新运行测试脚本后发现性能有较大提升。
 
 
 
JDBC connection size 20  w/ default nursery
JDBC connection size 100 w/ 100M nursery
Increase %
 
操作A
22.125
12.079
83%
操作B
35.195
21.773
62%
 
 
在性能调优完成后,我们又进行了功能测试(回归测试),以验证上述改动没有影响系统的功能性正确。

 

总结:

 

看到这七款性能分析工具,我可以肯定地说,它们都非常不错。如果你有基于Spring的应用程序,那么选择Spring Insight显然是最佳的。它一直是免费的,但你需要部署你的应用在TC Server上。

 

如果你想监听本地和远程的进程,我会选择JProfiler或YourKit.这两个也可以帮助Spring Insight来监测、找到性能瓶颈。

 

JProfiler和YourKit已经能满足我的上述要求。JProfiler、 YourKit和Spring Insight都可以跟踪应用程序的类和方法的流向。JProfiler和YourKit可以显示内存使用情况。虽然Spring Insight不可以显示内存使用情况,但它可以很好的显示吞吐量的趋势。这三款性能分析工具功能很清楚,不混乱,而且容易使用。最后,他们都有自己的 IDE插件。

分享到:
评论

相关推荐

    javacore分析工具

    JavaCore分析工具是一种在Java应用程序出现问题时,...总之,JavaCore分析工具是Java开发和运维过程中不可或缺的诊断工具,它能够帮助开发者深入理解JVM内部工作原理,有效地解决性能问题,保障Web应用程序的稳定运行。

    jca javacore分析工具

    - **分析heapdump**:接着,使用heapdump分析工具查找内存占用大的对象,分析其生命周期,找出可能导致内存泄漏的嫌疑对象。 - **排查与修复**:定位到问题后,分析代码逻辑,找出导致问题的原因,如无用对象未被...

    常用性能分析和网络分析工具

    1. **任务管理器**:这是Windows操作系统内置的性能分析工具,可以查看CPU、内存、硬盘和网络等资源的实时使用情况,还能用于进程管理和结束不必要的进程。 2. **top和htop**:在Linux系统中,top命令提供了一个...

    JAVA性能测试工具

    JAVA性能测试工具是IT行业中用于评估和优化JAVA应用程序性能的关键组件。这些工具旨在模拟真实世界的负载情况,帮助开发者识别和解决性能瓶颈,确保应用程序在高负载下仍能保持稳定和高效运行。以下是对几种主要JAVA...

    一个Java写的日志分析工具

    在Java中,日志分析工具可能使用了诸如`java.util.logging`、`log4j`、`slf4j`或`logback`等流行的日志框架。这些框架提供了记录、控制和格式化日志的能力,使得开发者能够方便地跟踪和理解程序行为。 描述中提到的...

    性能分析工具.rar

    以下是针对“性能分析工具.rar”中提到的三个工具的详细介绍: 1. **gc-analyzer** `gc-analyzer` 是一个专门用于分析Java垃圾收集(Garbage Collection, GC)行为的工具。GC是JVM中非常重要的一部分,负责管理...

    IBM java线程堆栈分析工具

    IBM为WebSphere Application Server (WAS) 提供了一款名为"jca467.jar"的线程堆栈分析工具,专门用于处理与IBM Java相关的线程分析任务。 首先,我们来了解一下什么是线程堆栈。线程堆栈是每个线程在执行过程中创建...

    java性能分析工具.zip

    Java性能分析工具,如JProfiler,是开发人员和系统管理员在优化Java应用程序时的重要武器。JProfiler是一款功能强大的Java性能剖析器,它提供了对内存、CPU、线程、类加载器、Garbage Collection(GC)等多种性能...

    IBM WebSphere JavaCore分析工具

    IBM WebSphere JavaCore分析工具是针对IBM WebSphere应用服务器中出现的问题进行诊断的重要工具。JavaCore文件是由IBM WebSphere生成的一种日志文件,它记录了JVM(Java虚拟机)在遇到严重错误或异常时的堆栈跟踪和...

    android性能分析工具

    - **Android Studio Profiler**:集成了内存、CPU、网络和UI性能的实时分析,是目前最常用的Android性能分析工具,与IDE紧密结合,使用方便。 - **Firebase Performance Monitoring**:Google提供的云服务,可收集...

    java内存,性能分析工具Optimizeit Profiler介绍(类似MAT,JConsole等)

    Optimizeit Profiler虽然强大,但需要注意的是,性能分析工具的使用必须谨慎,因为过多的监控可能会对应用本身造成额外负担,影响实际性能。因此,合理地选择分析时机和级别至关重要。 在《性能测试工具OptimizeIt...

    JavaMelody JAVA Web项目服务器性能监控工具

    JavaMelody是一款强大的JAVA Web项目服务器性能监控工具,它能够实时、全面地监控应用程序的运行状态,帮助开发者和运维人员了解系统性能瓶颈,及时发现并解决问题。通过在Java Web应用中简单集成,JavaMelody就能...

    Jprofiler使用介绍--java性能分析工具中文帮助.pdf

    JProfiler是一款强大的Java性能分析工具,专为J2SE和J2EE应用程序设计。它集CPU、线程和内存分析于一体,提供了一套全面的解决方案来检测和优化Java应用的性能问题。JProfiler的使用对于理解和提升Java服务器的性能...

    JavaCore和HeapDump分析工具

    1. 使用分析工具打开HeapDump文件,查看总体内存占用情况,识别占用内存最多的类和实例。 2. 分析大对象,检查是否有内存泄漏的迹象,如长生命周期的临时对象或者不再使用的对象占用大量内存。 3. 查看类加载器信息...

    Java性能监控工具Jprofiler4.3.2

    Java性能监控工具JProfiler是Java开发中的重要辅助软件,它为开发者提供了深入的性能分析功能,帮助优化应用程序的运行效率。JProfiler 4.3.2版本是该工具的一个历史版本,虽然较新版本可能拥有更多特性,但4.3.2...

    Java CPU性能分析工具代码实例

    Java CPU性能分析工具代码实例是用于诊断和解决Java应用程序中的CPU性能问题的工具。该工具通过示例代码详细介绍了如何使用jstack命令来定位CPU飙升问题的根源,并提供了一个脚本文件来自动化该过程。 工具的主要...

    java问题性能测试分析流程.doc

    下面介绍几种常用的Java性能分析工具。 3.2. 工具分类介绍 3.2.1. HttpWatch:主要用于HTTP性能分析,可以监控网页加载时间和各个部分的详细耗时,帮助优化前端性能。 3.2.2. ThreadDump:用于生成Java线程快照,...

    javacore\heapdump文件分析工具

    本篇文章将详细讲解如何使用`javacore`和`heapdump`分析工具,特别是针对Websphere环境的`ha`和`jca`工具,以及如何使用JDK1.6来打开和解析这些文件。 首先,`javacore`文件是Java虚拟机(JVM)在遇到特定事件(如...

    藏经阁-Java Flight Recorder & Mission Control 一个高效的性能分析工具.pdf

    Java Flight Recorder & Mission Control 一个高效的性能分析工具 Java Flight Recorder(JFR)是一款高效的性能分析工具,旨在帮助开发者和运维人员深入了解Java应用程序的运行时行为、性能瓶颈和故障原因。JFR的...

Global site tag (gtag.js) - Google Analytics