- profile a demo session or a saved session 选择一个保存的session
- Attach to a running JVM 选择一个正在运行的JVM
- Profile an application server,locally or remotely 连接本地或者远程的应用
- Open a snapshot 打开一个快照
Jprofiler的两种采集方式
-
Instrumentation(重构模式):在加载class之前,JProfier把相关代码写入到需要分析的class的bytecode中,对正在运行的jvm有一定影响
- 优点:调用堆栈的信息是准确的
- 去点:如果分析的class较多,则对应的性能影响较大,此模式最好需要跟Filter使用,只对特定的类或包进行分析 -
Sampling:类似于样本统计,每隔一段时间(5ms)将每个线程中方法栈中的信息统计出来
- 优点:对cpu开销非常小
- 缺点:一些数据/特性不能提供(方法的调用次数/执行时间)
如果是对正在运行的java程序进行采集,最好使用Sampling进行分析
使用方式
1.遥感监测
2. 内存视图
选择是对类的分析还是对包的总体分析==(如果class很多,建议使用package进行分析)==
选择 | 中文描述 | 详细信息 |
---|---|---|
Recorded Objects | 记录对象 | 查看特定时间段对象的分配,并记录分配的调用堆栈 |
Allocation Call Tree | 分配树访问 | 显示一棵树请求或者方法,类,包或对已选择类有带注释的分配信息的J2EE组件 |
Allocation Hot Spot | 分配热点 | 显示一个列表,包括方法,类,包或分配已选择类的J2EE组件。你可以标注当前值并且显示于每个热点都可以显示他的跟踪记录数 |
Class Tracker | 类追踪器 | 类跟踪视图可以包含任意数量的图表,显示选定的类和包的实例与时间 |
- 对象分析:
- 频繁创建java对象:死循环,循环次数过多
- 存在大的对象:读取文件时,byte[]应该边写边读。—>如果长时间不写出,会导致byte[]过大
- 内存泄漏
如果内存出现一下的情况,也就是在GC的时候,内存还是处于上升的状态的时候就需要去查看内存泄漏