`
no7beckham
  • 浏览: 97182 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Effective Java Profiling With Open Source Tools(开源Java性能分析工具)

    博客分类:
  • JAVA
 
阅读更多

本文内容节选自infoq上的此文章http://www.infoq.com/articles/java-profiling-with-open-source

 

If your application is experiencing unusually high memory load, frequent freezes or OOME, its often most useful to start by understanding just what kind of objects are present in memory. Luckily the JVM comes out-of-the-box with the ability to do so, with the built-in tool ‘jmap’.

 

JVM自带的工具jmap可以帮你理解内存现存的各种对象。

 

In order to run jmap, you need to know the PID of the application that you want to run jmap against. One easy way to obtain this is to use the JVM-provided tool jps, which will list out each and every JVM process running on your machine, along with each process’ PID. The output of jps will look like the following:

 

但在使用jmap之前,你需要先获取到该application的PID,  一个简单的方法是使用另一个jvm自带的命令jps,该命令会列出你机器上所有jvm进程,包括PID。

 

To print out a memory histogram, we will invoke the jmap console app passing in our application’s PID and the “-histo:live” option . So, if we wanted to retrieve a memory histogram for the “eureka.Proxy” application from the figure above, we invoke jmap as:

 

为了打印内存使用图,我们会使用一下命令。注:jmap 有不同的参数选项

jmap –histo:live 45417

 

The output of the above command might look something like the following:

 

原文后面还有几张图来对比在内存泄漏状况下使用jmap的情况,在此就省略啦。

 

Note that jmap isn’t a profiling tool, and that the JVM might halt during the histogram generation, so be sure its acceptable for your application to pause for the time it takes to generate the histogram. In my experience though, generating a histogram is something you do more often when debugging a serious bug, and so a few one minute pauses of the application is likely acceptable during such circumstances. This brings me nicely along to the next topic – the semi-automatic profiling tool VisualVM.

 

在使用jmap的时候,会导致你的应用暂停。根据作者的经验,一般在调试一个严重bug的情况下使用是可以接受的。下面介绍半自动的性能分析工具VisualVM.

 

在原文中作者只是给了个使用VisualVM的例子,并没有告知如何安装使用VisualVM,在http://visualvm.java.net/可以下载VisualVM,同时VisualVM入门指南在此http://visualvm.java.net/zh_CN/gettingstarted.html。具体的可以自己下载安装试用体验。

原文中最后一段话指出VisualVM不是一个全特性的优化工具,同时也不能一直运行于你生产环境的JVM,还不能存储获得的数据,以及不能设定警报值等。所以下面会介绍BTrace。

Understand that VisualVM is not a full-featured profiler, as its not capable of constantly running against your production JVM. It won’t persist its data, nor will it be able to specify thresholds and send alerts when these thresholds are breached. To be able to get closer to the goal of a full-featured profiler, let’s look next at BTrace, a full-featured open source Java agent.

 

 

看完了BTrace的介绍发现这个工具是需要写annotation到代码中的,同时还需要用它自带的一个编译器编译过,而且本身只输出文本,没有提供任何图形化的工具,MY GOD, 还是算了吧。

 

在试用VisualVM的过程中发现了一个有用的java命令,jstat - Java Virtual Machine Statistics Monitoring Tool,该命令可以查看当然jvm的一些统计信息。同使用jmap一样,先用jps获取到PID,然后使用jstat观察该PID对象的JVM信息。

例如: jstat -gc 24910

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
9152.0 12416.0 1464.2  0.0   92864.0   5874.1   352256.0   59318.4   65536.0 63847.1     34    1.098   0      0.000    1.098

显示的结果是GC的相关信息。每个column对应的信息如下

Column Description
S0C Current survivor space 0 capacity (KB).
S1C Current survivor space 1 capacity (KB).
S0U Survivor space 0 utilization (KB).
S1U Survivor space 1 utilization (KB).
EC Current eden space capacity (KB).
EU Eden space utilization (KB).
OC Current old space capacity (KB).
OU Old space utilization (KB).
PC Current permanent space capacity (KB).
PU Permanent space utilization (KB).
YGC Number of young generation GC Events.
YGCT Young generation garbage collection time.
FGC Number of full GC events.
FGCT Full garbage collection time.
GCT Total garbage collection time.

更多信息可参看此网页http://download.oracle.com/javase/6/docs/technotes/tools/share/jstat.html

 

分享到:
评论

相关推荐

    Profiling and Testing with Test and Performance Tools Platform.pdf

    《Profiling and Testing with Test and Performance Tools Platform》是一份由IBM Canada的Eugene Chan和Jonathan West共同撰写的文档,主要介绍了TPTP(Test and Performance Tools Platform)平台的配置步骤及其...

    Python-profiling一个交互式Python性能分析工具

    Python-profilng是一个强大的交互式Python性能分析工具,它允许开发者深入理解代码的运行时性能,从而找到程序的瓶颈并优化代码。在Python开发过程中,调试工具是必不可少的,特别是对于那些性能敏感的应用,理解...

    Java Profiling Tool-开源

    Java Profiling Tool 开源项目旨在为开发者提供一个利用 Java Virtual Machine Profiler Interface (JVMPI) 实现的性能分析工具。这个工具可以帮助开发者深入了解 Java 应用程序的运行情况,以便优化代码性能、减少...

    WPF Performance Profiling Tools

    WPF 提供了一套性能分析工具,允许您分析应用程序的运行时行为并确定可以应用的性能优化类型。下表列出了 Windows SDK 工具 WPFPerf 中包含的五个性能分析工具: 本主题包含以下部分。 使用性能分析工具 事件追踪 ...

    precise power delay profiling with commodity PPT

    本文介绍了一种利用普通Wi-Fi设备进行精确的功率延迟分析的技术,具体来说,是通过商品化的Wi-Fi设备,即我们日常使用的无线网络设备,来进行精确的功率延迟剖面(Power Delay Profile, PDP)分析。功率延迟剖面是一...

    java内存分析工具介绍

    3. **JProfiler**:这是一款功能全面的商业Java性能分析工具,具有实时内存分析、CPU Profiling、线程分析等功能。其内存分析部分能识别出未释放的对象和内存碎片,提供详细的内存分配历史,便于找出问题根源。 4. ...

    Mysql自带profiling性能分析工具使用分享

    MySQL的内置性能分析工具——Profiling,是数据库管理员和开发者用于优化SQL查询性能的重要利器。本文将详细介绍如何使用MySQL的Profiling功能,以及它在性能分析中的应用。 首先,我们可以通过`show variables ...

    Deep Learning: Practical Neural Networks with Java 完整高清英文azw3版

    Deep Learning: Practical Neural Networks with Java by Yusuke Sugomori English | 8 Jun. 2017 | ASIN: B071GC77N9 | 1057 Pages | AZW3 | 20.28 MB Build and run intelligent applications by leveraging key ...

    Java性能分析20211022.rar

    使用分析工具,如Eclipse Memory Analyzer (MAT),可以帮助我们识别内存泄漏、不必要的大对象、未释放的引用等问题。优化内存使用包括减少不必要的对象创建,及时释放不再使用的对象,合理设置JVM内存参数(如-Xms, ...

    Open Source Data Quality and Profiling:全球首个开源数据质量和数据准备项目-开源

    该工具正在开发高性能的集成数据管理平台,它将无缝地进行数据集成,数据分析,数据质量,数据准备,虚拟数据创建,元数据发现,异常发现,数据清理,报告和分析。 它还具有Hadoop(大数据)支持,可将文件移入...

    google-perftools 源码 (一款针对 C/C++ 程序的性能分析工具)

    google-perftools 是一款针对 C/C++ 程序的性能分析工具,它是一个遵守 BSD 协议的开源项目。使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析,本文将重点介绍如何进行 CPU 时间片的剖析。 google...

    java性能监视和管理官方指南

    3. **性能分析工具(Profiling Tools)**:Java提供了一系列性能分析工具,例如jmap、jstack、jstat和jconsole等,用于监控内存使用、线程状态、虚拟机性能指标和应用程序的性能瓶颈。 4. **JVM参数调整(JVM ...

    java服务程序性能测试总结

    2. **数量最多的实例对象**:通过JMX或内存分析工具,找出内存中占比较高或异常增长的对象。 3. **JVM堆空间分析**:观察JVM的堆内存使用情况,调整堆大小,优化垃圾回收策略。 4. **数据库写入效率**:优化SQL语句...

    java-error-in-idea64主要是javaJVM的dump导出学习使用

    1. **JDK Mission Control (JMC)**:这是一个强大的JVM监控和分析工具,它可以打开并分析heap dump文件,提供内存泄漏探测器、线程分析等功能。通过JMC,你可以找到内存消耗最大的对象类别,追踪对象的生存路径,...

    Linux Profiling at Netflix.pdf

    为了满足超过5000万订户的高满意度和成本效益,Netflix致力于开发云范围内的分析工具,并将其开源为NetflixOSS。在这个背景下,"Linux Profiling at Netflix"探讨了如何利用perf_events(也称为"perf")进行高效的...

    php网站性能分析利器工具,比java的jmeter还好用,还是图形化GUI界面.zip

    本文将深入探讨一种被赞誉为“php网站性能分析利器工具”的应用,它甚至被认为比Java的JMeter更为便捷,且提供了图形化GUI界面。这个工具的具体名称并未在标题和描述中提及,但从文件名我们可以推测它可能是...

    性能分析工具 TProfiler.zip

    TProfiler 是一款专为JAVA开发者设计的强大性能分析工具,它在生产环境中具有良好的适用性,能够帮助开发人员深入理解应用程序的性能瓶颈,优化代码执行效率。TProfiler 提供了剖析(Profiling)和采样(Sampling)...

    Eclipsecon08-Profiling.ppt

    Eclipse TPTP(Test and Performance Tools Platform)是IBM和Intel等公司合作开发的一个开源项目,旨在为Java应用程序提供测试和性能优化的工具平台。自2002年作为Eclipse Tools Project的一部分启动以来,它在2005...

Global site tag (gtag.js) - Google Analytics