`
m635674608
  • 浏览: 5042858 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

HPROF: 一个Heap/CPU Profiling工具

 
阅读更多

HPROF: 一个Heap/CPU Profiling工具

http://blog.csdn.net/ae86_fc/article/details/5960719

J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profiling,叫做HPROF。HPROF实际上是JVM中的一个native的库,它会在JVM启动的时候通过命令行参数来动态加载,并成为 JVM进程的一部分。若要在java进程启动的时候使用HPROF,用户可以通过各种命令行参数类型来使用HPROF对java进程的heap或者 (和)cpu进行profiling的功能。HPROF产生的profiling数据可以是二进制的,也可以是文本格式的。这些日志可以用来跟踪和分析 java进程的性能问题和瓶颈,解决内存使用上不优的地方或者程序实现上的不优之处。二进制格式的日志还可以被JVM中的HAT工具来进行浏览和分析,用 以观察java进程的heap中各种类型和数据的情况。

在J2SE 5.0以后的版本中,HPROF已经被并入到一个叫做Java Virtual Machine Tool Interface(JVM TI)中。


HPROF的启用



HPROF可以用来展示和跟踪cpu的使用情况,内存分配的统计数据等。不仅如此,它还支持对 java进程完整的内存dump,所有线程的monitor stats数据。HPROF被启用的方式可以如下:
java -agentlib:hprof[=options] ToBeProfiledClass
或者
java -Xrunhprof[:options] ToBeProfiledClass
HPROF如何构建java进程,并发送进程的jvm profiling信息,取决于HPROF在JVM启动时从命令行获取的参数指令。比如,以下指令将会获取java进程的heap allocation的profile:
java -agentlib:hprof=heap=sites ToBeProfiledClass

HPROF 可以被指定的参数非常的多,以下是完整的列表:

java -agentlib:hprof=help


        HPROF: Heap and CPU Profiling Agent (JVM TI Demonstration Code)

    hprof usage: java -agentlib:hprof=[help]|[<option>=<value>, ...]

    Option Name and Value  Description                    Default
    ---------------------  -----------                    -------
    heap=dump|sites|all    heap profiling                 all
    cpu=samples|times|old  CPU usage                      off
    monitor=y|n            monitor contention             n
    format=a|b             text(txt) or binary output     a
    file=<file>            write data to file             java.hprof[.txt]
    net=<host>:<port>      send data over a socket        off
    depth=<size>           stack trace depth              4
    interval=<ms>          sample interval in ms          10
    cutoff=<value>         output cutoff point            0.0001
    lineno=y|n             line number in traces?         y
    thread=y|n             thread in traces?              n
    doe=y|n                dump on exit?                  y
    msa=y|n                Solaris micro state accounting n
    force=y|n              force output to <file>         y
    verbose=y|n            print messages about dumps     y

    Obsolete Options
    ----------------
    gc_okay=y|n

    Examples
    --------
     - Get sample cpu information every 20 millisec, with a stack depth of 3:
         java -agentlib:hprof=cpu=samples,interval=20,depth=3 classname
     - Get heap usage information based on the allocation sites:
         java -agentlib:hprof=heap=sites classname

默认情况下,java进程profiling的信息(sites和dump)都会被 写入到一个叫做java.hprof.txt的文件中。大多数情况下,该文件中都会对每个trace,threads,objects包含一个ID,每一 个ID代表一个不同的观察对象。通常,traces会从300000开始。

默认,force=y,会将所有的信息全部输出到output文件中,所以如果含有 多个JVMs都采用的HRPOF enable的方式运行,最好将force=n,这样能够将单独的JVM的profiling信息输出到不同的指定文件。

interval选项只在 cpu=samples的情况下生效,表示每隔多少毫秒对java进程的cpu使用情况进行一次采集。

msa选项仅仅在Solaris系统下才有效, 表示会使用Solaris下的Micro State Accounting功能

Examples



我们可以自己写一个java应用程序,但是例子 里将使用一个J2SE中已有的java应用程序,javac。

Heap Allocation Profiles(heap=sites)



以下是对一个java代码文件运行java编译 器javac的heap allocation profile日志的一部分:
Command used: javac -J-agentlib:hprof=heap=sites Hello.java
从日志中可以看到程序在运行的每一个部分都消耗了多少内存的heap profile数据。以上日志可以看出,整个程序的heap中有44.73%的被分配给了java.util.zip.ZipEntry对象。同时可以观 察到,live data的数量跟所有allocated的总数是匹配atch的,这就说明GC可能在HPROF遍历整个heap搜集信息的很短的时间之前已经做过一次内 存回收了。通常情况下,live data的数量是会稍微少于所有allocated的总数的。
   
Heap Dump (heap=dump)



该选项用来对java进程的heap进行进行完 全的dump:
Command used: javac -J-agentlib:hprof=heap=dump Hello.java
这样会产生一个非常大的输出文件,但是可以用任 何编辑器进行打开和搜索。但是,更好的观察和分析办法是通过HAT来进行分析和观察。所有用heap=sites选项中获取的信息这里也都可以获取到。另 外还加上一些特别的细节数据。如对每个对象的内存分配以及其引用的其他所有的对象。
该选项会使用很多的内存,因为它会将所有对象的 内存分配情况全部记录下来,同时也可能会影响到应用程序本身的性能,因为数据的产生会影响对象分配和资源回收。

CPU Usage Sampling Profiles (cpu=samples)



HPROF可以用来搜集java进程中各个threads的cpu使用情况:
HPROF会对java进程中所有的threads进行周期性的stack traces采集。以上count一列就表示在采集中有多少次的stack trace被HPROF发现,并且是active的(而不是指一个method被执行了多少次)。这些stack traces包括cpu的使用,哪些是cpu消耗热点。
那么以上日志中可以看出什么信息呢?第一,统计数据的样本数据是很少的,只有126次的采样,如 果是比较大的程序编译,那么应该能够产生更有代表性的数据。第二,该数据跟以上对heap=sites的采集数据比较匹配,ZipFile耗费了比较多的 cpu时间和调用次数。在以上采集中,可以发现,跟ZipFile相关的的性能在javac中都会消耗的比较高,该ZipFile的stack trace如下:

CPU Usage Times Profile (cpu=times)



HPROF可以通过对java应用程序的各个方 法中注入code的方式来搜集各个method的执行情况。对每个methods的执行情况进行跟踪,count以及时间消耗的搜集。这种技术叫做 Byte Code Injection。所以这种采集方式的运行比cpu=samples要慢很多,以下是采集数据日志:
这里的count代表着该方法被真正执行了多少次,并且方法thread消耗了多少精确的cpu 时间。

 

http://www.cnblogs.com/linhaohong/archive/2012/07/12/2588657.html

分享到:
评论

相关推荐

    Android hprof 自动化dump heap脚本:djheap.sh

    Android hprof 自动化dump heap脚本 MAC 上执行脚本: pid 为 app 的进程 id sh ./djheap.sh [packageName] [pid] 导出 hprof 文件可以用 mat 工具进行分析

    jmap -dump:format=b,file=heapdump.hprof Pid堆栈文件分析工具

    1. **生成堆转储文件**:通过`-dump:format=b,file=&lt;filename&gt;`选项,我们可以将Java进程的堆内存信息导出为一个二进制格式的文件,通常命名为`heapdump.hprof`。这个文件包含了JVM堆中的所有对象及其引用关系,是...

    MemoryAnalyzer-1.10.0.20200225-win32.win32.x86-64.zip

    Shallow Heap :一个对象所占用的内存,不包含对其他对象的引用 Retained Heap :是shallow Heap的总和(单个对象占用内存*此对象的个数),也就是该对象被GC之后所能回收到内存的总和 分析方式: 1.查找线程下...

    heapdump文件分析工具(最新2012-12-18)

    heapdump文件分析工具(最新2012-12-18) 用于分析OOM内存溢出的错误

    heapdump分析工具

    首先,heapdump是一个包含Java虚拟机(JVM)堆内存快照的文件,它记录了程序运行时所有对象以及它们之间的引用关系。通过分析heapdump文件,我们可以找出占用内存较大的对象,追踪内存泄漏的源头,以及了解对象生命...

    dump文件分析工具,.hprof memoryanalyzer_v1.5.0.rar

    `memoryanalyzer_v1.5.0.rar`是一个包含MAT的版本1.5.0的压缩包,提供了对Java堆内存的深入洞察。 在MAT中,有以下几个核心功能和概念: 1. **对象概述(Leak Suspects)**:MAT会自动分析dump文件并提供可能的...

    MAT解析hprof内存溢出分析工具OutOfMemoryError-java程序开发

    1. **数据获取**:首先,你需要获取一个`hprof`文件,这是Java虚拟机(JVM)生成的内存快照,通常在`OutOfMemoryError`发生时生成。你可以通过JVM参数`-XX:+HeapDumpOnOutOfMemoryError`配置自动导出,或者在程序...

    hprof-conv文件下载和使用说明

    hprof-conv.exe 在sdk tools 里面缺少这个运行文件导致DDMS files not found: tools\hprof-conv.exe 错误 , 详细看博客:https://blog.csdn.net/DickyQie/article/details/79657573

    leakcanary_sample

    在Android应用开发中,内存泄漏是一个常见的问题,它会导致应用性能下降,甚至引发应用无响应(ANR)等问题。为了解决这个问题,开发者通常会借助各种工具进行检测,其中LeakCanary是一款广受欢迎的内存泄漏检测库。...

    mat工具,可以分析hprof文件

    8. **哈希表视图(Hash Tables)**:对于使用哈希表(如HashMap)导致的内存问题,MAT提供了一个专门的视图来分析其内容和内存占用。 9. **线程堆栈(Thread Stack)**:MAT还显示每个线程的堆栈信息,这对于定位与...

    IBM WEBSPHERE heapdump分析工具 ha456

    生成的heapdump文件通常是一个.hprof格式的二进制文件,包含了JVM内存中的所有对象和类的信息。为了解析这些信息,我们需要使用专门的分析工具,这就是"ha456.jar"发挥作用的地方。ha456是一个IBM提供的轻量级heap...

    性能测试常用命令.doc

    性能测试是软件测试的一个重要方面,涉及到对系统的整体性能进行评估和优化。下面将从硬件信息、中间件、监控Linux服务器、监控和诊断JVM、其它命令五个方面总结常用的性能测试命令。 一、硬件信息 在性能测试中,...

    hprof-conv.exe

    补充到android-sdk下的platform-tools下即可, 链接文章:https://mp.csdn.net/postedit/80325722

    HPROF Agent 中文版本

    【HPROF 代理】是Java开发工具包(JDK)中的一个JVM TI代理,用于进行性能分析。它是一个动态链接库,通过JVM TI接口与Java虚拟机交互,将分析信息以ASCII或二进制格式输出到文件或通过套接字传输。HPROF的主要功能...

    javacore\heapdump文件分析工具

    3. 运行`ha`工具,指定`heapdump.hprof`文件作为输入。 4. 分析`ha`工具生成的报告,查看内存占用大的对象,查找潜在的内存泄漏。 使用`jca`工具分析`javacore`文件的步骤类似: 1. 解压缩`jca396.zip`,获取`jca`...

    利用wsadmin生成javacore,heapdump文件

    `wsadmin`工具是IBM WebSphere Application Server (WAS) 提供的一个命令行脚本工具,用于管理WebSphere实例。它支持多种语言,包括JavaScript、Python等,可以执行各种管理任务,如监控、配置和诊断。 生成java...

    javahprof文件分析工具1.0安装英文版

    java hprof(文件类型分析器)是一款功能强大的java问题解析软件。可以帮助大家在编辑过程种遇到问题的话就马上解决哦。有兴趣的话赶紧下载! 软件介绍: 许多配置属性可以控制分析过程,这些属性也可以通过JobConf...

    抓取memory的shell(native和hprof)

    `smem`是一个报告系统内存使用情况的工具,而`top`则提供实时的进程资源使用情况。通过这些工具,我们可以找到占用内存最多的进程,并进一步分析其内存使用模式。 接下来,我们转向HProf,这是一种由Java虚拟机生成...

    hprof-conv 内存转mat工具

    hprof-conv ,内存转mat工具

    解决sdk tools运行缺少hprof-conv文件

    **hprof-conv** 是一个重要的工具,全称为Heap Profiling Format Converter,它主要用于处理和转换Android设备生成的.hprof文件。这些文件是Android系统用于内存分析的,当开发者需要对应用进行内存泄漏检测或者性能...

Global site tag (gtag.js) - Google Analytics