JVM监控及诊断工具--- JProfiler

JProfiler (功能远强大于MAT,是IDEA中的插件,收费

安装好JProfiler后,可在IDEA中同时安装插件JProfiler,进行配置

JVM监控及诊断工具--- JProfiler_第1张图片

 

 点击蓝色图标,即可以JProfiler的方式启动程序 

JVM监控及诊断工具--- JProfiler_第2张图片

JProfier数据采集方式分为两种: Sampling(样 本采集)和Instrumentation (重构模式)
        Instrumentation: 这是JProfiler全功能模式。在dlass加载之前,JProfier把相关功能代码写入到需要分析的class的bytecode中,对正在运行的jvm有一定影响。                                                             优点: 功能强大。在此设置中,调用堆栈信息是准确的。                                                                     缺点: 若要分析的class较多,则对应用的性能影响较大,CPU开销可能很高(取决于Filter的控制)。因此使用此模式一般配合Filter使用,只对特定的类或包进行分析。
        Sampling: 类似于样本统计,每隔一定时间(5ms )将每个线程栈中方法栈中的信息统计出来。
        优点: 对CPU的开销非常低,对应用影响小(即使你不配置任何Filter)
        缺点:  一些数据/特性不能提 供(例如: 方法的调用次数、执行时间)
注: JProfiler本身没有指出数据的采集类型,这里的采集类型是针对方法调用的采集类型。因为
JProfiler的绝大多数核心功能都依赖方法调用采集的数据,所以可以直接认为是JProfiler的数据
采集类型。

1. 遥感检测(Telemetries) 

JVM监控及诊断工具--- JProfiler_第3张图片

 2. 内存视图(Live Memory)

JVM监控及诊断工具--- JProfiler_第4张图片

重点关注:

>频繁创建的Java对象: 死循环、循环次数过多                                                                                >存在大的对象:读取文件时,byte[]应 该边读边写。--> 如果长时间不写出的话,导致byte[]过大
>存在内存泄漏

3. 堆遍历(Heap Walker)

JVM监控及诊断工具--- JProfiler_第5张图片

4. CPU视图(CPU views) 默认不开启

JVM监控及诊断工具--- JProfiler_第6张图片

 百分比表示当前场景被调用的概率,xxxms表示执行总时间

5. 线程(Threads) 

JProfiler通过对线程历史的监控判断其运行状态,并监控是否有线程阻塞产生,还能将一个线程所
管理的方法以树状形式呈现,对线程剖析
线程历史Thread History
显示一个与线程活动和线程状态在一起的活动时间表
线程监控Thread Monitor
显示一个列表,包括所有的活动线程以及它们目前的活动状况
线程转储Thread Dumps
显示所有线程的堆栈跟踪

JVM监控及诊断工具--- JProfiler_第7张图片

线程分析主要关心三个方面:
1. web容器的线程最大数,比如: Tomcat的线程容量应该略大于最大并发数。
2. 线程阻塞
3. 线程死锁

6. 监视器&锁(Monitors&locks)   

JVM监控及诊断工具--- JProfiler_第8张图片
观察JVM的内部线程并查看状态:
死锁探测图表Current Locking Graph : 显示JVM中的当前死锁图表。
目前使用的监测器CurrentMonitors: 显示目前使用的监测器并且包括它们的关联线程。
锁定历史图表Locking History Graph: 显示记录在JVM中的锁定历史。
历史检测记录MonitorHistory: 显示重大的等待事件和阻塞事件的历史记录。
监控器使用统计Monitor Usage Statistics: 显示分组监测,线程和监测类的统计监测数据

7. 示例

如下图,内存持续增长,可能存在内存泄漏问题

JVM监控及诊断工具--- JProfiler_第9张图片

 进一步观察,发现byte[]一直居高不下

 根据Graph,发现可能与ArrayList有关JVM监控及诊断工具--- JProfiler_第10张图片

查看对应代码,发现ArrayList为静态引用

JVM监控及诊断工具--- JProfiler_第11张图片

 修正:将ArrayList改为非静态引用

JVM监控及诊断工具--- JProfiler_第12张图片

现内存变化呈正常趋势

 JVM监控及诊断工具--- JProfiler_第13张图片

你可能感兴趣的:(JVM,java,idea)