JVM学习-Jprofiler

news2025/2/22 20:25:10

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的数据采集类型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
遥感监测Telemetries
内存视图 Live Memory

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

待续… …

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1791303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB~索引使用与优化

Study by: https://docs.mongoing.com/indexeshttps://www.cnblogs.com/Neeo/articles/14325130.html#%E5%85%B6%E4%BB%96%E7%B4%A2%E5%BC%95 作用 如果你把数据库类比为一本书,那书的具体内容是数据,书的目录就是索引,所以索引…

C++第三方库【httplib】断点续传

什么是断点续传 上图是我们平时在浏览器下载文件的场景,下载的本质是数据的传输。当出现网络异常,浏览器异常,或者文件源的服务器异常,下载都可能会终止。而当异常解除后,重新下载文件,我们希望从上一次下载…

用例篇03

正交表 因素:存在的条件 水平:因素的取值 最简单的正交表:L4(2) 应用 allpairs 来实现正交表。 步骤: 1.根据需求找出因素和水平 2.将因素和水平写入到excel表格中(表格不需要保存)(推荐用…

文本批量高效编辑器:一键在每行结尾添加分隔符,助力文本处理飞速提升!

在信息爆炸的时代,文本处理成为了一项不可或缺的技能。然而,面对大量的文本数据,如何高效地进行处理却成为了一项挑战。这时,一款高效、易用的文本批量编辑器就显得尤为重要。这个软件就是首助编辑高手 首先,打开首助…

fairseq框架使用记录

sh命令 cmd"fairseq-train data-bin/$data_dir--save-dir $save_dir--distributed-world-size $gpu_num -s $src_lang -t $tgt_lang--arch $arch--dropout $dropout--criterion $criterion --label-smoothing 0.1--task mmt_vqa--optimizer adam --adam-betas (0.9, 0.98…

高并发系统限流原理

短时间内巨大的访问流量,我们如何让系统在处理高并发的同时还能保证自身系统的稳定性?估计有人会说,增加机器就可以了,因为我的系统架构设计就是按照分布式思想进行架构设计的,所以可以只需要增加机器就可以解决问题了…

代码随想录算法训练营day41

题目:01背包理论基础、416. 分割等和子集 参考链接:代码随想录 动态规划:01背包理论基础 思路:01背包是所有背包问题的基础,第一次看到比较懵,完全不知道dp数据怎么设置。具体分析还是dp五部曲&#xff…

Vue3实战笔记(58)—从零开始掌握Vue3插槽机制,基础入门

文章目录 前言插槽基础入门总结 前言 不论是组件封装还是分析源码,实际开发中经常接触插槽,插槽是干什么用的呢?组件之间能够接收任意类型的 JavaScript 值作为 props,但组件要如何接收模板内容呢?在某些场景中&#…

openssl 常用命令demo

RSA Private Key的结构(ASN.1) RSAPrivateKey :: SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- …

k8s学习--ConfigMap详细解释与应用

文章目录 一 什么是configmapConfigMap 的好处ConfigMap 的限制 二.创建ConfigMap的4种方式1.在命令行指定参数创建2.在命令行通过多个文件创建3.在命令行通过文件提供多个键值对创建4.YAML资源清单文件创建 三 configmap的两种使用方法1.通过环境变量的方式传递给pod2.通过vol…

vue3+typescript 使用Codemirror

安装 // npm npm install codemirror-editor-vue3 codemirror^5.65.12// ts版 还需安装: npm install types/codemirror全局注册 修改main.ts: import { createApp } from vueimport App from ./App.vueimport { InstallCodemirro } from "code…

文件编码概念

文件的读取 open()函数: 打开一个已存在的文件,或者创建一个新文件 open(name,mode,encoding) name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径) mode:设置打开文件的模式(访问模式)&am…

LabVIEW步进电机的串口控制方法与实现

本文介绍了在LabVIEW环境中通过串口控制步进电机的方法,涵盖了基本的串口通信原理、硬件连接步骤、LabVIEW编程实现以及注意事项。通过这些方法,用户可以实现对步进电机的精确控制,适用于各种自动化和运动控制应用场景。 步进电机与串口通信…

【Linux】信号(一)

信号我们将从信号产生,信号的保存,信号处理分别进行讲解~ 至少大思路是这样。开始之前还要进行一些基础知识的铺垫。 目录 从生活中提炼一些结论:信号概念的一些储备:信号产生:一、kill指令:二、键盘组合键…

[数据集][目标检测]轮胎检测数据集VOC+YOLO格式439张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):439 标注数量(xml文件个数):439 标注数量(txt文件个数):439 标注类别…

面试官:核心线程数为零时,线程池会处理任务吗?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

Redis篇 list类型在Redis中的命令操作

list在redis基本的命令 一.基本命令1.lpush和range2.lpushx rpushx3.lpop rpop4.lindex linsert llen5.lrem6.ltrim lset7.blpop brpop 一.基本命令 list在redis中相当于数组或者顺序表. 1.lpush和range 2.lpushx rpushx 3.lpop rpop 4.lindex linsert llen 如果要插入的列表中…

详解 Spark 核心编程之累加器

累加器是分布式共享只写变量 一、累加器功能 ​ 累加器可以用来把 Executor 端的变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在 Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Dri…

程序媛:拽姐

更多精彩内容在公众号。 最近都在玩梗图,我也来玩下拽姐的梗图。来说说拽姐做为程序媛的痛。 程序媛的痛不在于996,而在于无休止的攻关。拽姐刚入职听领导说攻关不多,一年也就一次,拽姐心中暗喜,觉得来对了地方。结果…

MySQL之查询性能优化(六)

查询性能优化 查询优化器 9.等值传播 如果两个列的值通过等式关联,那么MySQL能够把其中一个列的WHERE条件传递到另一列上。例如,我们看下面的查询: mysql> SELECT film.film_id FROM film-> INNER JOIN film_actor USING(film_id)-> WHERE f…