• IDEA插件JProfiler安装使用


    前言

    Eclipse内存映像分析工具插件有MAT,IDEA也有JProfiler,本文主要对JProfiler安装及使用进行学习。

    JProfiler是什么

    JProfiler 是一个专业工具,用于分析正在运行的 JVM 内部发生的情况。 在开发中你可以使用它,用于质量保证,也可以解决你的生产系统遇到的问题。

    JProfiler 处理四个主要场景:

    方法调用

    这通常称为“CPU 分析”。方法调用可以在不同的方法。方法调用的分析帮助您了解您的应用程序是什么正在做并想方设法提高其性能。

    • 分配

    分析堆上对象的分配、引用链和垃圾集合属于“内存分析”类别。此功能使您能够修复内存泄漏,通常使用更少的内存并分配更少的临时对象。

    • 线程和锁

    线程可以持有锁,例如通过在对象上同步。当多个线程合作,可能会发生死锁,JProfiler
    可以为您可视化它们。另外,锁也可以争用,这意味着线程必须等待才能获取它们。 JProfiler 提供深入了解线程及其各种锁定情况。

    • 更高级别的子系统

    许多性能问题发生在更高的语义级别上。例如,对于 JDBC 调用,您可能想找出最慢的 SQL 语句。对于这样的子系统,JProfiler
    提供了将特定负载附加到调用树的“探针”。


    JProfiler 的 UI 是作为桌面应用程序交付的。您可以交互式地分析活动的 JVM 或配置文件在不使用 UI
    的情况下自动进行。分析数据保存在可以打开的快照中使用 JProfiler UI。此外,命令行工具和构建工具集成可以帮助您自动化分析会话。

    JPROFILER 最新版本13.0 添加了对附加到在 Kubernetes 集群中运行的 JVM 的支持。

    安装

    IDEA安装插件JProfiler

    在这里插入图片描述

    官网下载Jprofiler软件

    https://www.ej-technologies.com/download/jprofiler/files
    在这里插入图片描述

    IDEA配置Jprofiler执行文件

    在这里插入图片描述需要激活码

    使用

    可配合IDEA使用,也可单独使用分析hprof文件。需激活
    在这里插入图片描述
    可以选择运行中的JVM监测。
    在这里插入图片描述

    在这里插入图片描述

    指标分析

    在这里插入图片描述

    VM TELEMETRY

    为了观察 JVM 的内部状态,JProfiler 提供了各种遥测视图:

    Heap

    用图表显示已用堆和堆大小的时间线。

    Recorded objects

    显示带有已记录的活动对象和数组的图表的时间线。

    Recorded throughput

    显示时间线以及记录对象的对象创建率和垃圾回收率图表。

    GC activity

    显示带有垃圾收集器活动图的时间线。

    Classes

    显示带有加载类图的时间线。

    Threads

    显示带有活动线程图的时间线。

    CPU load

    显示时间线和分析的应用程序生成的 CPU 负载图。

    在这里插入图片描述

    MEMORY PROFILING

    JProfiler 的内存视图部分提供动态更新的内存使用视图和显示分配点信息的视图。所有视图都有多个聚合级别,可以显示活动对象和垃圾收集对象。

    All objects

    显示堆上所有对象的类或包以及实例计数和大小信息。您可以标记当前值并显示差异。

    Recorded objects

    显示所有记录对象的类或包。您可以标记当前值并显示差异。

    Allocation call tree

    显示调用树或方法、类、包或 JEE/Spring 组件,并带有选定类的注释分配。

    Allocation hot spots

    显示分配所选类的方法、类、包或 JEE/Spring 组件的列表。您可以标记当前值并显示差异。可以为每个热点显示回溯树。

    Class tracker

    显示带有所选类的实例计数图表的时间线。

    在这里插入图片描述

    HEAP WALKER

    在 JProfiler 的堆遍历器中,您可以拍摄堆快照并通过执行选择步骤深入到感兴趣的对象。heap walker 有五个视图:

    Classes

    显示所有类及其实例。

    Allocations

    显示记录对象的分配树和分配热点。

    Biggest objects

    显示阻止堆的最大部分被垃圾收集的对象。支配树可以就地展开以显示这些保留的对象。

    References

    显示带有原始数据的单个对象的传出引用和带有“显示垃圾收集器根路径”功能的传入引用。还提供传入和传出参考的累积视图。在传出参考视图中,您可以应用过滤器。有两种不同的过滤器类型:按原始值过滤和使用脚本过滤。

    Data

    显示单个对象的实例和类数据。

    Time

    显示记录对象的时间分辨直方图。

    Inspections

    在检查视图中,您可以对当前对象集运行许多检查,以各种方式分析您的对象。

    Graph

    在图中,您可以添加来自不同对象集的对象,并通过打开传入和传出引用、查找选定对象之间的路径以及显示垃圾收集器根路径来探索它们的关系。

    在这里插入图片描述

    CPU PROFILING

    JProfiler 提供了多种方法来记录调用树以优化性能或细节。可以为所有视图选择线程或线程组以及线程状态。所有视图都可以在方法、类、包或 JEE/Spring 组件级别上聚合。CPU 视图部分包含:

    Call tree

    显示 JVM 中所有记录的调用序列的累积自上而下树。JDBC、JMS 和 JNDI 服务调用被注释到调用树中。调用树可以针对不同的请求 URL 拆分到 servlet 或 JSP。您可以将方法标记为“异常方法运行记录”,并分别查看最慢的调用。通过请求跟踪,您可以将调用站点连接到多线程应用程序中的执行站点。

    Hot spots

    显示最耗时的方法列表。可以为每个热点显示回溯树。

    Call graph

    显示从选定方法、类、包或 JEE/Spring 组件开始的调用序列图。

    Method statistics

    显示有关所有方法的调用时间分布的统计信息以及调用时间分布图,可用于发现异常值。Call tracer

    Call tracer

    显示按线程、包和类分组的方法调用的记录时间跟踪。

    在这里插入图片描述

    THREAD PROFILING

    对于线程分析,JProfiler 提供以下视图:

    Thread history

    显示具有线程活动和线程状态的时间线。

    Thread monitor

    显示所有活动线程及其当前活动的列表。

    Thread dumps

    您可以获取多个线程转储并在线程转储视图中分析它们。

    在这里插入图片描述

    MONITOR PROFILING

    对于监视器分析,JProfiler 提供以下视图:

    Current locking graph

    显示 JVM 中所有等待和阻塞情况的图表。

    Current monitors

    显示当前使用的监视器及其相关线程。

    Locking history graph

    以图表的形式显示记录的等待和阻塞情况的历史记录。

    Monitor history

    显示记录的等待和阻塞事件的历史记录。

    Monitor usage statistics

    显示按监视器、线程和监视器类别分组的监视器的统计信息。

    在这里插入图片描述

    DATABASES

    JProfiler 支持对以下数据库的特定探测:
    JDBC
    JPA/Hibernate
    MongoDB
    Cassandra
    HBase

    在这里插入图片描述

    JEE & PROBESJProfiler

    提供以下探针:
    JDBC
    JPA/Hibernate
    Servlets
    Netty
    HTTP requests
    Web services
    JMS
    JNDI
    RMI
    Files
    Sockets
    Processes
    在这里插入图片描述
    点赞 收藏 关注
    我寻你千百度 又一岁荣枯 可你从不在灯火阑珊处

  • 相关阅读:
    redis分布式锁的学习记录
    【c#】Quartz开源任务调度框架学习及练习Demo
    Servlet---上传文件
    javascript代码重构: 如何写好函数的9个技巧
    GIT高级使用技巧
    (七)Mybatis传值中#{}和${}的区别,及别名机制
    linux 里面卸载jdk
    Docker
    为什么不能直接在链表上进行操作
    C++ 智能指针
  • 原文地址:https://blog.csdn.net/qq_35764295/article/details/126281672