赞
踩
安装好JProfiler后,可在IDEA中同时安装插件JProfiler,进行配置
点击蓝色图标,即可以JProfiler的方式启动程序
JProfier数据采集方式分为两种: Sampling(样 本采集)和Instrumentation (重构模式)
Instrumentation: 这是JProfiler全功能模式。在dlass加载之前,JProfier把相关功能代码写入到需要分析的class的bytecode中,对正在运行的jvm有一定影响。 优点: 功能强大。在此设置中,调用堆栈信息是准确的。 缺点: 若要分析的class较多,则对应用的性能影响较大,CPU开销可能很高(取决于Filter的控制)。因此使用此模式一般配合Filter使用,只对特定的类或包进行分析。
Sampling: 类似于样本统计,每隔一定时间(5ms )将每个线程栈中方法栈中的信息统计出来。
优点: 对CPU的开销非常低,对应用影响小(即使你不配置任何Filter)
缺点: 一些数据/特性不能提 供(例如: 方法的调用次数、执行时间)
注: JProfiler本身没有指出数据的采集类型,这里的采集类型是针对方法调用的采集类型。因为
JProfiler的绝大多数核心功能都依赖方法调用采集的数据,所以可以直接认为是JProfiler的数据
采集类型。
1. 遥感检测(Telemetries)
2. 内存视图(Live Memory)
重点关注:
>频繁创建的Java对象: 死循环、循环次数过多 >存在大的对象:读取文件时,byte[]应 该边读边写。--> 如果长时间不写出的话,导致byte[]过大
>存在内存泄漏
3. 堆遍历(Heap Walker)
4. CPU视图(CPU views) 默认不开启
百分比表示当前场景被调用的概率,xxxms表示执行总时间
5. 线程(Threads)
JProfiler通过对线程历史的监控判断其运行状态,并监控是否有线程阻塞产生,还能将一个线程所
管理的方法以树状形式呈现,对线程剖析
线程历史Thread History
显示一个与线程活动和线程状态在一起的活动时间表
线程监控Thread Monitor
显示一个列表,包括所有的活动线程以及它们目前的活动状况
线程转储Thread Dumps
显示所有线程的堆栈跟踪
线程分析主要关心三个方面:
1. web容器的线程最大数,比如: Tomcat的线程容量应该略大于最大并发数。
2. 线程阻塞
3. 线程死锁
6. 监视器&锁(Monitors&locks)
观察JVM的内部线程并查看状态:
死锁探测图表Current Locking Graph : 显示JVM中的当前死锁图表。
目前使用的监测器CurrentMonitors: 显示目前使用的监测器并且包括它们的关联线程。
锁定历史图表Locking History Graph: 显示记录在JVM中的锁定历史。
历史检测记录MonitorHistory: 显示重大的等待事件和阻塞事件的历史记录。
监控器使用统计Monitor Usage Statistics: 显示分组监测,线程和监测类的统计监测数据
7. 示例
如下图,内存持续增长,可能存在内存泄漏问题
进一步观察,发现byte[]一直居高不下
根据Graph,发现可能与ArrayList有关
查看对应代码,发现ArrayList为静态引用
修正:将ArrayList改为非静态引用
现内存变化呈正常趋势
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。