All Objects
显示堆中实时的对象情况:显示某种类型(聚合级别可以是类、包等)对象的数量(Instance Count)、浅尺寸(Shallow size)关于浅尺寸的计算:
普通对象大小的计算不包括引用、类变量,由变量本身地址、基本类型的变量占用的内存等组成
数组整体计算,不分为单个元素计算大小/数量
注意,有些对象虽然没有引用,但是可能没被GC回收,可以手工Run GC
右击某一类型,可以转到Class Tracker或者Heaper Walker视图
Recorded Objects
显示已经进行记录的对象。与All Objects相比,可以查看对象分配调用树(Allocation Call Tree)、分配热点(Allocation Hot Sports)点击工具栏:Start Memory,可以录制对象分配
Allocation Call Tree
显示选中的、已录制对象类型的分配调用数,分析调用栈的哪些栈帧比较消耗资源。从线程执行开始处,一直追溯到对象被创建的地方,对象占用内存的大小被显示,效果如下图:
Allocation Hot Sports
显示选中的、已录制对象类型的分配热点:以创建对象的方法为根显示调用树,效果如下图:
Class Tracker
显示选中类型对象的实例个数的曲线图(按时间)
堆遍历(Heap Walker)
该视图用于静态分析堆快照,在生成快照之前,会进行一次Full GC。包含以下选项卡:
Classes
类似于Memory Views的All Objects,可以显示快照中所有对象的数量、大小。右击选择Use Selected Instances,则可以显示单种类型的数据
Allocations
分析对象分配情况:包括4种显示方式:Cumulated Allocation Tree:累积调用树,显示对象分配调用树,包含对象sizeAllocation Tree:调用树,显示对象分配调用树,包含对象sizeAllocation Tree Map:以Tree Map形式显示调用树Allocation Hot spots:显示分配对象最多的方法
Biggest Objects
显示占用内存最多的对象
References
显示单种类型的引用情况包含4种显示方式:Incoming references:其它对象对每一个选中对象的引用Outcoming references:每一个选中对象对其它对象的引用Cumulated Incoming references:显示其它对象、字段对选中对象类型的总体引用统计Cumulated Outcoming references:显示选中对象类型对其它对象、字段的总体引用统计
分析对象分配的消耗时间
Inspections
提供多种精细的对象分配分析方式
Graph
图形化方式显示对象的引用图
CPU视图(CPU Views)
该视图用于分析方法的CPU占用时间,包括以下选项卡:
Call Tree
显示自顶而下的调用堆栈的树,树的根是线程开始处,树的分叉表示的不同的调用路径。暗红色显示当前节点及其子节点消耗的时间、高亮红色显示本级节点消耗的时间。
显示未过滤类对过滤类的直接调用,不显示深入的调用,在被过滤类的左上角显示红三角。main方法、线程的run方法总是显示,不予过滤。
通过Profiling Settings可以选择CPU时间的度量方式:Elapsed time/Estimated CPU time,前者为Wall clock time(物理世界真实时间),后者为占用CPU的时间。由于操作系统的固有限制,10ms以下的时间可能不具有统计学意义。
界面右上角的Thread Status用于选择参与分析的线程状态,通常选择Runnable来分析性能问题,有时可以结合Net I/O、Blocked
工具栏Start Tracking,可以追踪某些任务在不同线程之间的传递(调用点/执行点Call site/Execution site)
效果如下图:
绿色:Runnable
:表示线程可以接受CPU调度,但不一定正在占用CPU,和线程优先级、调度算法、系统负载有关
黄色:Waiting:
表示线程正在睡眠(java.lang.Thread.Sleep),或者在监视器上等待(java.lang.Object.wait),前者不会放弃占有的监视器
红色:Blocked:
表示线程被阻塞,正在积极尝试进入同步区
浅蓝色:Net I/O:
线程正在等待网络操作的完成,监听Socket或者读写Socket时产生此状态
效果图如下:
JavaEE以及探针(JEE & Probes)
可以使用多种探针来检测不同的应用领域,包括:JDBC、JPA/Hibernate、JNDI、JMS、Servlet、RMI、Socket、WebServices、Files等。
用于在特定条件下触发剖析动作
触发条件:方法被调用、堆使用阈值、CPU使用率阈值、内存溢出异常、定时器、虚拟机启动、虚拟机关闭等
剖析动作:启/停录制、调用跟踪、监视器跟踪,触发堆dump、线程dump,启/停探针录制,保存快照,保存HPROF快照,运行脚本等
使用场景:脚本启动剖析、定期快照保存、剖析远程服务器
Session ID:需要指定id=xxx参数来激活相应的Profiling Settings,此ID显示在Session Settings - Application Settings的左上角,如果配置文件中只包含一个Session,则不需要配置。
配置文件位置:可以指定config=xxx.xml,来指明设置的存放位置,默认是~/.jprofiler7/config.xml
离线剖析命令行样例:
"-agentpath:D:\JavaEE\jprofiler\7.2.2\bin\windows-x64\jprofilerti.dll=offline,id=109,config=D:\JavaEE\Config\jprofiler-offline.xml"
"-Xbootclasspath/a:D:\JavaEE\jprofiler\7.2.2\\bin\agent.jar"
-
classpath
myapp
.jar
cc
.gmem
.demo
.MyApp
出处:
Genesisx的博客--http://www.cnblogs.com/Genesisx
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文版权归作者和博客园共有,欢迎转载。
但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。