JProfiler
基本概述
特点
- 使用方便,界面操作友好
- 对被分析的应用影响小(提供模板)
- CPU,Tread,Memory分析功能尤其强大
- 支持对jdbc,noSql,jsp,servlet,socket进行分析
- 支持多种模式(离线、在线)的分析
- 支持监控本地、远程JVM
- 跨平台,拥有多种操作系统版本
主要功能
- 方法调用:对方法调用的分析可以帮助您了解应用程序在做什么,并找到提高其性能的方法
- 内存分配:通过分析堆上对象、引用链和垃圾收集能帮您修复内存泄漏问题,优化内存使用
- 线程和锁:JProfiler提供多种针对线程和锁的分析视图帮助您发现多线程问题
- 高级子系统:许多性能问题都发生在更高的语义级别上,如对于JDBC调用,可能希望找出执行最慢的SQL语句,JProfiler支持对这些子系统进行集成分析
具体使用
数据采集方式
- Instrumentation重构模式:这是JProfiler的全功能模式,在class加载之前,JProfiler把相关功能代码写入到需要分析的class的bytecode中,对正在运行的JVM有一定影响
- 优点:功能强大,在此设置中,调用堆栈信息是准备的
- 缺点:若分析的class较多,则对应用的性能影响较大,CPU开销可能很高(取决于Filter控制),因此使用此模式一般配合Filter使用,只对特定类或包进行分析
- Sampling抽样模式:类似于样本统计,每隔一定时间(5ms)将每个线程中方法栈的信息统计出来
- 优点:对CPU的开销非常低,对应用影响小(即使不配置任何Filter)
- 缺点:一些数据/特性不能提供
- JProfiler本身没有指出数据的采集类型,这里的采集类型是针对方法调用的采集类型,因为JProfiler的绝大多数核心功能都依赖方法调用采集的数据,所以可直接认为是JProfiler的数据采集类型
遥感监测Telemetries
内存视图 Live Memory
- class/class instance相关信息,例如对象的个数,大小,对象创建的方法执行栈,对象创建的热点
- 所有对象All Objects--显示所有加载的类的列表和在堆上分配的实例数
- 记录对象Record Objects--查看特定时间段对象的分配,并记录分配的调用堆栈
- 分配访问树Allocation Call Tree--显示一棵请求树或者方法,类,包或对已选择类有带注释的分配信息的J2EE组件
- 分配热点Allocation Hot Spots--显示一个列表,包括方法,类,包或分配已选类的J2EE组件,可以标注当前值并显示差异值,对于每个热点都可以显示它的跟踪记录树
- 类追踪器Class Tracker--类跟踪视图可以包含任意数量的图表,显示选定的类和包的实例与时间
- 分析内存情况
- 频繁创建的Java对象:死循环,循环次数过多
- 存在大对象,读取文件时,byte[]应该边读边客情,如果长时间不写,导致byte[]过大
- 存在内存泄漏
堆遍历 Heap Walker
CPU视图 CPU views
- 类Classes:显示所有类和它们的实例,可以右键具体类"Used Selected Instance"实现进一步跟踪
- 分配Allocations:为所有记录对象显示分配树和分配热点
- 索引References:为单个对象和"显示到垃圾回收根目录的路径"提供索引图的显示功能,还能提供合并输入视图和输出视图的功能
- 时间Time:显示一个对已记录对象的解决时间的柱状图
- 检查Inspections:显示一个数量的操作,将分析当前对象集在某种条件下的子集,实质是一个筛选过程
- 图表Graph:需要在references视图和biggest视图手动添加对象图表,它可以显示对象的传入和传出引用,能方便找到垃圾收集器根源
- 在工具栏点击"Go To Start"可以使堆内存重新计数,也就是回到初始状态
线程视图 Threads
- JProfiler通过对线程历史的监控判断其运行状态,并监控是否有线程阻塞产生,还能将一个线程所管理的方法以树状形式呈现,对线程剖析
- 线程历史 Thread History:显示一个与线程活动和线程状态在一起的活动时间表
- 线程监控Thread Monitor:显示一个列表,包括所有的活动线程以及它们目前的活动状况
- 线程转储Thread Dumps:显示所有线程的堆栈跟踪
监视器&锁 Monitors&Locks
- 所有线程持有锁的情况以及锁的信息
- 观察JVM的内部线程并查看状态
- 死锁探测图表 Current Locking Graph:显示JVM中的当前死锁图表
- 目前使用的监测器 Current Monitor:显示目前使用的监测器并且包括它们的关联线程
- 锁定历史图表 Locking History Graph:显示记录在JVM中的锁定历史
- 历史检测记录 Monitor History:显示重大的等待事件和阻塞事件的历史记录
- 监控器使用统计 Monitor Usage Statistics:显示分组监测,线程和监测类的统计监测数据