zoukankan      html  css  js  c++  java
  • JProfiler学习笔记

    转自https://blog.gmem.cc/jprofiler-study-note
    内存视图(Memory Views)

    该视图专注于对象的内存分配情况,包含以下选项卡:

     All Objects 显示堆中实时的对象情况:显示某种类型(聚合级别可以是类、包等)对象的数量(Instance Count)、浅尺寸(Shallow size)关于浅尺寸的计算:
    1. 普通对象大小的计算不包括引用、类变量,由变量本身地址、基本类型的变量占用的内存等组成
    2. 数组整体计算,不分为单个元素计算大小/数量

    注意,有些对象虽然没有引用,但是可能没被GC回收,可以手工Run GC

    右击某一类型,可以转到Class Tracker或者Heaper Walker视图

    Recorded Objects 显示已经进行记录的对象。与All Objects相比,可以查看对象分配调用树(Allocation Call Tree)、分配热点(Allocation Hot Sports)点击工具栏:Start Memory,可以录制对象分配
    Allocation Call Tree 显示选中的、已录制对象类型的分配调用数,分析调用栈的哪些栈帧比较消耗资源。从线程执行开始处,一直追溯到对象被创建的地方,对象占用内存的大小被显示,效果如下图:
    Allocation Hot Sports 显示选中的、已录制对象类型的分配热点:以创建对象的方法为根显示调用树,效果如下图:alloc-hotsopt
    Class Tracker  显示选中类型对象的实例个数的曲线图(按时间)
    堆遍历(Heap Walker)

    该视图用于静态分析堆快照,在生成快照之前,会进行一次Full GC。包含以下选项卡:

    Classes 类似于Memory Views的All Objects,可以显示快照中所有对象的数量、大小。右击选择Use Selected Instances,则可以显示单种类型的数据
    Allocations 分析对象分配情况:包括4种显示方式:Cumulated Allocation Tree:累积调用树,显示对象分配调用树,包含对象sizeAllocation Tree:调用树,显示对象分配调用树,包含对象sizeAllocation Tree Map:以Tree Map形式显示调用树Allocation Hot spots:显示分配对象最多的方法
    Biggest Objects 显示占用内存最多的对象
    References 显示单种类型的引用情况包含4种显示方式:Incoming references:其它对象对每一个选中对象的引用Outcoming references:每一个选中对象对其它对象的引用Cumulated Incoming references:显示其它对象、字段对选中对象类型的总体引用统计Cumulated Outcoming references:显示选中对象类型对其它对象、字段的总体引用统计
    Time 分析对象分配的消耗时间
    Inspections 提供多种精细的对象分配分析方式
    Graph 图形化方式显示对象的引用图
    CPU视图(CPU Views)

    该视图用于分析方法的CPU占用时间,包括以下选项卡:

     Call Tree 显示自顶而下的调用堆栈的树,树的根是线程开始处,树的分叉表示的不同的调用路径。暗红色显示当前节点及其子节点消耗的时间、高亮红色显示本级节点消耗的时间。
    显示未过滤类对过滤类的直接调用,不显示深入的调用,在被过滤类的左上角显示红三角。main方法、线程的run方法总是显示,不予过滤。
    通过Profiling Settings可以选择CPU时间的度量方式:Elapsed time/Estimated CPU time,前者为Wall clock time(物理世界真实时间),后者为占用CPU的时间。由于操作系统的固有限制,10ms以下的时间可能不具有统计学意义。
    界面右上角的Thread Status用于选择参与分析的线程状态,通常选择Runnable来分析性能问题,有时可以结合Net I/O、Blocked
     
    工具栏Start Tracking,可以追踪某些任务在不同线程之间的传递(调用点/执行点Call site/Execution site)

    效果如下图:
    call-tree

     Hot Spots 显示耗时最高的方法调用,显示消耗时间、平均消耗时间、调用次数等字段,以耗时方法为根,可以追溯到线程启动处Filtered Classes设置:选择被过滤类占用时间,可以单独列出,或者算在调用它的元素上(main、线程run不能过滤)
    每个方法可能被多个调用栈调用,百分比显示不同调用栈对此方法的固有时间的“贡献”
    不显示Total time,只显示Inherent Time
    Call Graph 显示方法调用的序列,包括某个方法的调用与被调用情况
    Method Stat 点击工具栏图标,可以录制方法的统计信息并进行分析
    Call Tracer 点击工具栏图标,可以对方法调用进行跟踪
    线程视图(Thread Views)

    该视图用于分析线程的状态和历史分析、检测死锁,并可以获取线程快照,包含以下选项卡:

    Thread History 线程状态时间线,可以选择显示活着的或者死去的线程
    绿色:Runnable:表示线程可以接受CPU调度,但不一定正在占用CPU,和线程优先级、调度算法、系统负载有关
    黄色:Waiting:表示线程正在睡眠(java.lang.Thread.Sleep),或者在监视器上等待(java.lang.Object.wait),前者不会放弃占有的监视器
    红色:Blocked:表示线程被阻塞,正在积极尝试进入同步区
    浅蓝色:Net I/O:线程正在等待网络操作的完成,监听Socket或者读写Socket时产生此状态
    效果图如下:
    thread-history
    Thread Monitor 显示线程的开始结束时间、父线程、状态等信息
    Thread Dumps 获取线程快照,可以分析瞬时系统各线程的调用栈
    监视器视图(Monitor Views)

    该视图用于锁状态检测,包含以下选项卡:

     Current Locking Graph 当前锁状态图,显示监视器、以及在监视器上等待的线程。

    黑色箭头表示当前拥有此监视器的线程

    红色虚线表示被阻塞的线程(积极尝试获得锁)

    黄色箭头表示在监视器上等待的线程(java.lang.Object.wait)

    效果图如下:

    current-monitor

    Current Monitors 显示当前活动的监视器,包括监视器状态、监视器类、等待线程、拥有者线程等信息
    Locking History Graph 可以录制监视器锁定的历史
    Monitor History 可以显示所有监视器的历史
    Monitor Usage Stat 以监视器、线程等方式分组,显示监视器的使用统计,包括阻塞次数、阻塞持续时间、等待次数、等待持续时间等
    虚拟机遥感视图(VM Telemetry Views)

    该视图可以显示时间线上的系统宏观信息,包括以下选项卡:

    Memory 显示已有、空闲内存的区域图
    Recorded Objects 显示堆中对象(数组、非数组)的数量
    Recorded Throughput 显示已记录对象的创建和销毁数量
    GC Activity 显示GC活动率百分比
    Classes 显示加载的类的数量
    Threads 显示处于各种状态的线程的数量
    CPU Load 显示CPU负载百分比
    JavaEE以及探针(JEE & Probes)

    可以使用多种探针来检测不同的应用领域,包括:JDBC、JPA/Hibernate、JNDI、JMS、Servlet、RMI、Socket、WebServices、Files等。

    剖析配置
    触发器

    用于在特定条件下触发剖析动作
    触发条件:方法被调用、堆使用阈值、CPU使用率阈值、内存溢出异常、定时器、虚拟机启动、虚拟机关闭等
    剖析动作:启/停录制、调用跟踪、监视器跟踪,触发堆dump、线程dump,启/停探针录制,保存快照,保存HPROF快照,运行脚本等

    离线剖析

    使用场景:脚本启动剖析、定期快照保存、剖析远程服务器

    Session ID:需要指定id=xxx参数来激活相应的Profiling Settings,此ID显示在Session Settings - Application Settings的左上角,如果配置文件中只包含一个Session,则不需要配置。
    配置文件位置:可以指定config=xxx.xml,来指明设置的存放位置,默认是~/.jprofiler7/config.xml
    离线剖析命令行样例:

     
  • 相关阅读:
    Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
    WinForm 程序的界面多语言切换
    c#遍历HashTable
    Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
    Dot Net WinForm 控件开发 (六) 为属性提供弹出式编辑对话框
    Dot Net WinForm 控件开发 (一) 写一个最简单的控件
    Dot Net WinForm 控件开发 (四) 设置属性的默认值
    Dot Net WinForm 控件开发 (二) 给控件来点描述信息
    Dot Net WinForm 控件开发 (八) 调试控件的设计时行为
    Dot Net WinForm 控件开发 (五) 复杂属性的子属性
  • 原文地址:https://www.cnblogs.com/Genesisx/p/10361938.html
Copyright © 2011-2022 走看看