精华内容
下载资源
问答
  • Hprof

    千次阅读 2016-07-22 15:27:54
    转载地址:... 一、开发者的自测利器-Hprof命令 1. 示例演示 例子程序: /** * PROJECT_NAME: test * DATE: 16/7/22 * CREATE BY: chao.cheng **/ public class HProfTest

    转载地址:http://geek.csdn.net/news/detail/90509


    一、开发者的自测利器-Hprof命令

    1. 示例演示

    例子程序:

    /**
     * PROJECT_NAME: test
     * DATE:         16/7/22
     * CREATE BY:    chao.cheng
     **/
    public class HProfTest {
        public void slowMethod() {
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void slowerMethod() {
            try {
                Thread.sleep(10000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            HProfTest test = new HProfTest();
            test.slowerMethod();
            test.slowMethod();
        }
    }

    :这是一段测试代码通过sleep方法进行延时,在程序运行过程中很慢,我想知道到底是哪段程序影响的整体性能呢?

    我在这个java程序中,加了如下运行参数:

    -agentlib:hprof=cpu=times,interval=10
    /* 
        times:java函数的执行时间
        hprof=cpu是针对cpu统计时间
        interval=10 采样10次 
    */

    再次运行这段程序显示如下图:

    图片描述

    这时候还发现在工程目录里面,多了一个文本文件java.hprof.txt,如下图所示:

    图片描述

    内容如下:

    CPU TIME (ms) BEGIN (total = 11542) Fri Jul 22 11:00:34 2016
    rank   self  accum   count trace method
       1 86.65% 86.65%       1 303422 com.test.HProfTest.slowerMethod
       2  8.66% 95.31%       1 303423 com.test.HProfTest.slowMethod
       3  0.25% 95.56%      36 300745 java.util.zip.ZipFile.<init>
       4  0.20% 95.76%      36 300434 java.lang.String.equals
       5  0.13% 95.89%      14 301138 java.net.URLStreamHandler.parseURL
       6  0.11% 96.01%       6 301339 java.net.URLClassLoader$1.run
       7  0.10% 96.10%      14 301124 java.lang.String.<init>
       8  0.09% 96.19%    3407 300355 java.lang.String.charAt
       9  0.08% 96.27%      36 300443 java.io.UnixFileSystem.normalize

    :通过上面内容可以看到,哪个类的方法执行时间长,耗费了CPU时间,一目了然,方便我们快速定位问题。

    2. 命令的具体讲解

    hprof不是独立的监控工具,它只是一个java agent工具,它可以用在监控Java应用程序在运行时的CPU信息和堆内容,使用java -agentlib:hprof=help命令可以查看hprof的使用文档。

    图片描述

    通过上图可以看到这个工具非常强大,可以统计的东西很多,上面的例子统计的是CPU时间,同样我们还可以统计内存占用的dump信息。 
    如:-agentlib:hprof=heap,format=b,file=/test.hprof

    这个hprof小工具,非常方便我们在用JUnit自测代码的时候结合使用,既可以解决业务上的BUG,又能够在一定程序上解决可发现的性能问题,非常实用。

    二、性能排查工具-pidstat

    1. 示例演示

    例子程序:

    /**
     * PROJECT_NAME: test
     * DATE:         16/7/22
     * CREATE BY:    chao.cheng
     **/
    public class PidstatTest {
        public static class PidstatTask implements  Runnable {
            public void run() {
                while(true) {
                    double value = Math.random() * Math.random();
                }
            }
        }
    
        public static class LazyTask implements Runnable {
            public void run() {
                try {
                    while (true) {
                        Thread.sleep(1000);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void main(String[] args) {
            new Thread(new PidstatTask()).start();
            new Thread(new LazyTask()).start();
            new Thread(new LazyTask()).start();
        }
    }

    :这是一段测试用的java程序,将其运行起来。

    在命令行输入:

    pidstat -p 843 1 3 -u -t
    /* 
    -u:代表对cpu使用率的监控
    参数1 3:表示每秒采样一次,一共三次
    -t:将监控级别细化到线程 
    */

    运行命令显示如下图所示:

    图片描述

    :其实中TID就是线程ID,%usr表示用户线程使用率,从图中可以看到855这个线程CPU占用非常高。

    再输入如下命令:

    jstack -l 843 > /tmp/testlog.txt

    查看testlog.txt显示如下部分内容:

    图片描述

    :我们关注的是日志文件的NID字段,它对应的就是我们上面说的TID,NID是TID的16进制表示,将上面的十进制855转换成十六进制为357,在日志中进行搜索看到如下内容:

    "Thread-0" prio=10 tid=0x00007f7d90103800 nid=0x357 runnable [0x00007f7d943d5000]
       java.lang.Thread.State: RUNNABLE
        at PidstatTest$PidstatTask.run(PidstatTest.java:13)
        at java.lang.Thread.run(Thread.java:722)
    
       Locked ownable synchronizers:
        - None

    以此可以推断出有性能瓶颈的程序点。

    2. pidstat具体命令详解

    pidstat是一个功能非常强大的性能监测工具,他是Sysstat的组件之一,可以从http://sebastien.godard.pagesperso-orange.fr/download.html 进行下载,下载后可以通过./configure等命令进行安装,这个命令的强大之处在于不仅可以监控进程的性能情况,也可以监控线程的性能情况。

    pidstat监控CPU常用显示字段内容如下:

    1、PID - 被监控的任务的进程号
    2%usr - 当在用户层执行(应用程序)时这个任务的cpu使用率,和 nice 优先级无关。注意这个字段计算的cpu时间不包括在虚拟处理器中花去的时间。
    3%system - 这个任务在系统层使用时的cpu使用率。
    4%guest - 任务花费在虚拟机上的cpu使用率(运行在虚拟处理器)。
    5%CPU - 任务总的cpu使用率。在SMP环境(多处理器)中,如果在命令行中输入-I参数的话,cpu使用率会除以你的cpu数量。
    6、CPU - 正在运行这个任务的处理器编号。
    7、Command - 这个任务的命令名称。

    pidstat监控IO常用的字段显示内容如下:

    1、kB_rd/s - 任务从硬盘上的读取速度(kb)
    2、kB_wr/s - 任务向硬盘中的写入速度(kb)
    3、kB_ccwr/s - 任务写入磁盘被取消的速率(kb)
    展开全文
  • 解决sdk tools运行缺少hprof-conv文件

    万次下载 热门讨论 2014-07-23 20:20:06
    hprof-conv.exe 关于sdk tools 里面缺少这个运行文件
  • java hprof_hprof教程

    2021-03-07 03:02:45
    大部分内容参考...HPROF实际上是JVM中的一个native的库,它会在JVM启动的时候通过命令行参数来动态加载,并成为 JVM进程的一部分。要使用hprof,可以通过在运行java程序时指定-a...

    大部分内容参考http://www.linuxidc.com/Linux/2012-04/58178.htm

    J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profiling,叫做HPROF。HPROF实际上是JVM中的一个native的库,它会在JVM启动的时候通过命令行参数来动态加载,并成为 JVM进程的一部分。

    要使用hprof,可以通过在运行java程序时指定-agentlib或者-Xrunhprof参数来使用,它会将cpu、heap等想着信息保存到一份文件中(默认情况是当前目录的java.hprof.txt。

    其实,HPROF产生的profiling数据可以是二进制的,也可以是文本格式的。这些日志可以用来跟踪和分析 java进程的性能问题和瓶颈,解决内存使用上不优的地方或者程序实现上的不优之处。二进制格式的日志还可以被JVM中的HAT工具来进行浏览和分析,用 以观察java进程的heap中各种类型和数据的情况。

    一、HPROF的参数

    通过以下命令执行hporf

    java -agentlib:hprof[=options] ToBeProfiledClass

    或者

    java -Xrunhprof[:options] ToBeProfiledClass

    HPROF 完整参数列表:

    java -agentlib:hprof=help

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

    hprof usage: java -agentlib:hprof=[help]|[=, ...]

    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=            write data to file             java.hprof[.txt]

    net=:      send data over a socket        off

    depth=           stack trace depth              4

    interval=          sample interval in ms          10

    cutoff=         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         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功能

    二、hprof的使用方式

    1、在eclipse中使用hporfile

    2、命令行运行hprof

    三、实际例子

    注意,进行hprof分析时,会将整个JVM中的情况进行分析,不只是当前的类。

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

    或者使用java -agentlib:hprof=heap=sites Hello.java命令

    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 时间。

    四、在Hadoop中使用hprof

    在JobConf中,有几个配置选项是可以用来控制task profiling行为的。比如对一个job,想要开启对其tasks的profiling功能,并设置profiling相应的HPROF参数,可以按如下方式:

    conf.setProfileEnabled(true);

    conf.setProfileParams("-agentlib:hprof=cpu=samples,heap=sites,depth=6," +

    "force=n,thread=y,verbose=n,file=%s");

    conf.setProfileTaskRange(true, "0-2");

    第一行表示打开profiling task的功能,该功能默认情况下是关闭的。调用该接口相当于设置配置选项 mapred.task.profile=true,可以利用这种方式在hadoop job提交命令行上动态指定。

    第二行是通过conf接口来设置对tasks进行HPROF 的profiling的采集参数,采用profiling enable的方式运行的tasks,会采用每个task一个独立的JVM的运行方式运行(即使enable了job的jvm reuse功能)。HPROF相关的采集参数设置,可以见其他资料。该选项也可以通过设置 mapred.task.profile.params 选项来指定。

    第三行表示对job的哪些tasks需要进行profiling采集,第一true参数表示采集的是map tasks的性能数据,false的话表示采集reduce的性能数据,第二个参数表示只采集编号为0,1,2的tasks的数据,(默认为0-2)。如果想要采集除2,3,5编号的tasks,可以设置该参数为: 0-1,4,6-

    Example

    还是拿wordcount来举例,提交job命令如下:

    bin/hadoop jar hadoop-examples-0.20.2-luoli.jar wordcount /

    -D mapred.reduce.tasks=10 /

    -D keep.failed.task.files=fales /

    -D mapred.task.profile=true /

    -D mapred.task.profile.params="-agentlib:hprof=cpu=samples,heap=sites,depth=6,force=n,thread=y,verbose=n,file=%s" /

    $input /

    $output

    这样,当job运行时,就会对前三个task进行profiling的采集,采集信息包括cpu的采样信息,内存分配的信息数据,stack trace 6层的堆栈信息。这里需要注意的是,由于前三个tasks被进行了HPROF的性能采样,所以这几个tasks的执行效率会受到一定的影响,profiling的信息越详细,性能影响就越大。如下图,前三个map就明显比其他的map运行的要慢很多。

    不过这种运行方式通常都不是线上运行方式,而是用来进行优化调试,所以关系不大。

    而当job运行完成后,这三个tasks对应的profiling日志也会会传到提交机器上,供用户分析判断。如下图:

    与此同时,tasks在tasktracker上也将这些profiling日志信息记录到了一个profile.out的日志文件中,该文件通常位于tasktracker机器上的上${HADOOP_HOME}/logs/userlogs/${attempt_id}下,和该task的stderr,stdout,syslog保存在同一个目录下,如下图:

    该文件中的内容,还可以通过taskdetails.jsp的页面查看到。如下图:

    有了这些信息,相信对于任何一位hadoop应用程序的开发者来说,就拥有了足够的定位job瓶颈的信息了。MR的应用程序开发同学,请优化您的job吧~~

    linux

    展开全文
  • hprof是什么文件?如何打开hprof?发布时间:2020-03-26 17:35:24来源:亿速云阅读:1195作者:小新hprof是什么文件?如何打开hprof?很多人都不太了解,今天小编为了让大家更加了解hprof,所以给大家总结了以下内容...

    hprof是什么文件?如何打开hprof?

    发布时间:2020-03-26 17:35:24

    来源:亿速云

    阅读:1195

    作者:小新

    hprof是什么文件?如何打开hprof?很多人都不太了解,今天小编为了让大家更加了解hprof,所以给大家总结了以下内容,一起往下看吧。

    5ba16a50d1bc7805094f8635a4d5b570.png

    hprof是什么文件?

    是java进程的内存镜像文件,里面包含了内存堆详细的使用信息。

    最近学习深入java虚拟机的书,照着里面的例子跑了下。

    如何打开hprof?

    下面是demo:/**

    * VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError

    * @author zzm

    */

    public class HeapOOM {

    static class OOMObject {

    }

    public static void main(String[] args) {

    List list = new ArrayList();

    while (true) {

    list.add(new OOMObject());

    }

    }

    }

    程序执行效果:

    e32fb9ec32de953f8c24933e8f37eb8c.png

    9ff4b25868aa6ad1f2d1db9da9f8ffff.png

    我这边产生的hprof文件路径:

    E:\IdeaProjects\java-virtual\java_pid2432.hprof

    打开这种文件的话,可以使用如下的软件:

    Memory Analyzer

    官网:http://www.eclipse.org/mat/downloads.php

    a4028e058ee838b81b7695ca62be3127.png

    双击打开,装载对应的 hprof 即可。

    以上就是hprof是什么文件?如何打开hprof的详细内容了,看完之后是否有所收获呢?如果如果想了解更多,欢迎来亿速云行业资讯!

    展开全文
  • HPROF Converter

    2020-05-11 22:38:08
    The hprof-conv tool converts the HPROF file that is generated by the Android SDK tools to a standard format so you can view the file in a profiling tool of your choice. hprof-conv You can use “-” ...

    The hprof-conv tool converts the HPROF file that is generated by the Android SDK tools to a standard format so you can view the file in a profiling tool of your choice.

    hprof-conv

    You can use “-” for or to specify stdin or stdout.

    展开全文
  • hprof-conv

    2018-12-28 15:53:53
    解决ubuntu 上Andrid stutidon sdk tools运行缺少hprof-conv文件,直接下载解压,放入sdk/tools/目录下,使用chmod 777 hprof-conv(可读可写可执行);
  • JVM可以对java程序的cpu和heap进行 profiling。hprof 实际上是JVM中的一个native的库,它...主要有两种使用方式:1.java -agentlib:hprof=[:options] classname2.java -Xrunhprof[:options] classname以下为 hprof ...
  • hprof教程

    2019-10-02 17:39:51
    J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profiling,叫做...HPROF实际上是JVM中的一个native的库,它会在JVM启动的时候通过命令行参数来动态加载,并成为 JVM进程的一部分。 要...
  • 2:找到导出保存hprof文件夹,在搜索框输入cmd,再输入命令行hprof-conv -z 2.hprof 2-mat.hprof 回车(hprof-conv -z固定写法,2.hprof 为需要转换的文件名,2-mat.hprof为转换后的文件名)...
  • hprof是什么文件?是java进程的内存镜像文件,里面包含了内存堆详细的使用信息。最近学习深入java虚拟机的书,照着里面的例子跑了下。如何打开hprof?下面是demo:/*** VM Args:-Xms20m -Xmx20m -XX:+...
  • python3 tools/hprof/dump_classes_from_hprof.py --hprof /Users/Downloads/load.hprof > list_of_classes.txt </code></pre> <p>however: <pre><code> Traceback (most recent call last): File "tools/...
  • 分析hprof文件

    千次阅读 2020-03-26 19:22:22
    1.cmd 进入D:\AndroidSDK\platform-tools> 目录,下面有hprof-conv.exe,执行命令 ...hprof-conv memory-20191106T171841.hprof heap-converted.hprof 把android格式的转为标准的hprof文件。 然后执行 jhat -J-X...
  • HPROF学习

    2015-08-07 11:40:00
    抓取HPROF log 1. GUI 可以通过 adt-bundle-windows-x86_64-20140702\sdk\tools\monitor.bat来抓取。 打开软件,选中相应的包,比如“com.android.mms”,然后点击"Dump HPROF file" 按钮,保存为 “mms_0810....
  • hprofjava -agentlib:hprof[=options] ToBeProfiledClass//java -Xrunprof[:options] ToBeProfiledClassjavac -J-agentlib:hprof[=options] ToBeProfiledClassHPROF: Heap and CPU Profiling Agent (JVMTI Demonstra...
  • Jprofile查看hprof文件

    千次阅读 2020-02-17 01:47:16
    用jprofile打开hprof文件,查看内存泄露情况,有几个常用的功能说明一下: 1 下载 1.1 官网 点击傻瓜式下载 2 安装 1、打开hprof文件:进入classes视图,根据(instance count和Size)基本可以确定哪个类的对象...
  • hprof是什么文件?是java进程的内存镜像文件,里面包含了内存堆详细的使用信息。最近学习深入java虚拟机的书,照着里面的例子跑了下。如何打开hprof?下面是demo:/*** VM Args:-Xms20m -Xmx20m -XX:+...
  • hprof-conv.rar

    2020-05-12 13:19:49
    解决运行eclipse提示 DDMS files not found: D:\Java\Android\android-sdk\platform-tools\hprof-conv.exe 问题。
  • hprof 相关

    2016-06-06 11:46:00
    adb shell am dumpheap com.test.test /sdcard/test.hprof 获取某个application的dump文件 adb pull /sdcard/**.txt D: 拉取某个文件。 转载于:https://www.cnblogs.com/lizebo/p/5563266.html...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,955
精华内容 782
关键字:

hprof