JVM学习-Jprofiler

2024-06-09 1381阅读

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的数据采集类型

            JVM学习-Jprofiler

            JVM学习-Jprofiler

            JVM学习-Jprofiler

            JVM学习-Jprofiler

            遥感监测Telemetries
            内存视图 Live Memory

            JVM学习-Jprofiler

            • class/class instance相关信息,例如对象的个数,大小,对象创建的方法执行栈,对象创建的热点
              • 所有对象All Objects–显示所有加载的类的列表和在堆上分配的实例数
              • 记录对象Record Objects–查看特定时间段对象的分配,并记录分配的调用堆栈
              • 分配访问树Allocation Call Tree–显示一棵请求树或者方法,类,包或对已选择类有带注释的分配信息的J2EE组件
              • 分配热点Allocation Hot Spots–显示一个列表,包括方法,类,包或分配已选类的J2EE组件,可以标注当前值并显示差异值,对于每个热点都可以显示它的跟踪记录树
              • 类追踪器Class Tracker–类跟踪视图可以包含任意数量的图表,显示选定的类和包的实例与时间
              • 分析内存情况
                • 频繁创建的Java对象:死循环,循环次数过多
                • 存在大对象,读取文件时,byte[]应该边读边客情,如果长时间不写,导致byte[]过大
                • 存在内存泄漏
                  堆遍历 Heap Walker

                  JVM学习-Jprofiler

                  JVM学习-Jprofiler

                  JVM学习-Jprofiler

                  JVM学习-Jprofiler

                  CPU视图 CPU views
                  • 类Classes:显示所有类和它们的实例,可以右键具体类“Used Selected Instance”实现进一步跟踪
                  • 分配Allocations:为所有记录对象显示分配树和分配热点
                  • 索引References:为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能,还能提供合并输入视图和输出视图的功能
                  • 时间Time:显示一个对已记录对象的解决时间的柱状图
                  • 检查Inspections:显示一个数量的操作,将分析当前对象集在某种条件下的子集,实质是一个筛选过程
                  • 图表Graph:需要在references视图和biggest视图手动添加对象图表,它可以显示对象的传入和传出引用,能方便找到垃圾收集器根源
                  • 在工具栏点击“Go To Start”可以使堆内存重新计数,也就是回到初始状态

                    JVM学习-Jprofiler

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

                        JVM学习-Jprofiler

                        JVM学习-Jprofiler

                        监视器&锁 Monitors&Locks
                        • 所有线程持有锁的情况以及锁的信息
                        • 观察JVM的内部线程并查看状态
                          • 死锁探测图表 Current Locking Graph:显示JVM中的当前死锁图表
                          • 目前使用的监测器 Current Monitor:显示目前使用的监测器并且包括它们的关联线程
                          • 锁定历史图表 Locking History Graph:显示记录在JVM中的锁定历史
                          • 历史检测记录 Monitor History:显示重大的等待事件和阻塞事件的历史记录
                          • 监控器使用统计 Monitor Usage Statistics:显示分组监测,线程和监测类的统计监测数据

                            JVM学习-Jprofiler

                            JVM学习-Jprofiler

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]