【jvm系列-12】jvm性能调优篇---GUI工具的基本使用

news2024/11/22 8:58:03

JVM系列整体栏目


内容链接地址
【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460
【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963
【三】运行时私有区域之虚拟机栈、程序计数器、本地方法栈https://blog.csdn.net/zhenghuishengq/article/details/129684076
【四】运行时数据区共享区域之堆、逃逸分析https://blog.csdn.net/zhenghuishengq/article/details/129796509
【五】运行时数据区共享区域之方法区、常量池https://blog.csdn.net/zhenghuishengq/article/details/129958466
【六】对象实例化、内存布局和访问定位https://blog.csdn.net/zhenghuishengq/article/details/130057210
【七】执行引擎,解释器、JIT即时编译器https://blog.csdn.net/zhenghuishengq/article/details/130088553
【八】精通String字符串底层机制https://blog.csdn.net/zhenghuishengq/article/details/130154453
【九】垃圾回收底层原理和算法以及JProfiler的基本使用https://blog.csdn.net/zhenghuishengq/article/details/130261481
【十】垃圾回收器的种类以及内部的执行原理https://blog.csdn.net/zhenghuishengq/article/details/130261481
【十一】jvm性能调优篇之命令行工具的基本使用https://blog.csdn.net/zhenghuishengq/article/details/130641456
【十二】jvm性能调优篇之GUI工具的基本使用https://blog.csdn.net/zhenghuishengq/article/details/130745931

JVM的诊断监控以及GUI工具的使用

  • 一,JVM的诊断监控以及GUI工具的使用
    • 1,GUI工具概述
    • 2,jConsole
    • 3,Visual Vm(重点)
    • 4,JProfiler(强)
    • 5,Arthas
    • 6,总结

一,JVM的诊断监控以及GUI工具的使用

1,GUI工具概述

命令行工具或者组合可以获取到Java应用性能相关的基础信息,但是也存在着一定的局限性,如无法获取到方法级别的数据分析,方法之间的调用关系,调用的次数和调用的时间等,并且使用命令行工具时,需要登录到Java应用所在的虚拟机上,使用起来不是很方便,并且最后通过终端将数据输出展示,不够直观。 因此为了解决命令行工具所带来的问题,则有了GUI工具的诞生。

在图形化工具中,主要分为JDK自带工具和一些第三方工具,JDK自带工具主要有 jConsole,visual VM、JMC 等,第三方工具主要有MAT、JProfiler、Arthas、Btrace。jconsole和visual VM是必须要了解和掌握的,JProfiler和Arthas是属于第三方的,相对于前二者,第三方工具的功能会更多和更强大

2,jConsole

jconsole是用于对jvm内存、线程和类的监控,是一个基于JMX的GUI性能的监控工具。可以在jdk安装目录下面的bin目录下面找到这个jconsole.exe双击进行启动,也可以直接通过在cmd命令中输入jconsole将此工具打开,打开后的界面如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KTw6F8XE-1684390467232)(img/1684115452965.png)]

jconsole的连接方式有三种,分别是Local本地连接,Remote远程连接、Advanced连接,使用远程连接的话需要通过一个JMX的代理,并且设置对应的用户名和密码,从而进行授权。而使用本地连接需要注意的是,启动本地代码的用户和启动jconsole的用户得是同一个用户。

这里以本地连接为例,随便运行一段代码,然后在cmd命令行工具中输入jconsole,随后不需要通过jps就可以在本地进程中找到其进程号,然后再双击进去这个进程里面,就可以发现以下的界面,通过下图可以发现,在该界面中,可以实时的监控着堆内存、线程、类、cpu占用率的使用情况。

在这里插入图片描述

如其内存的监控情况如下,会显示堆内存和非堆内存的信息,堆内存又会分成Eden区和Survivor区,并且每时每秒都对内存进行监控着,其折线图如下,代表的是内存达到一定的量就会触发一次GC

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rg7fDaLj-1684390467234)(img/1684116612304.png)]

同时也对线程每时每秒的进行监控着,同时这里面还有监测死锁的功能,jstack所对应的GUI

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dmnw1IAt-1684390467234)(img/1684116848651.png)]

并且可以通过 VM概要 得知一些新生代老年代使用的垃圾收集器的名称,操作系统,jvm供应商等信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LyuP0BeL-1684390467235)(img/1684116275018.png)]

3,Visual Vm(重点)

Visual VM是一个功能强大的多合一的故障诊断和性能监控的可视化工具,集成了多个JDK命令行工具,使用他可以显示虚拟机进程的配置和环境的信息(jps,jinfo),监视应用程序的CPU,GC,堆,方法区以及线程的信息(jstack,jstat)等,甚至可以代替jConsole的使用。

Visual VM不仅自身功能强大,他还有一个特点就是支持插件的扩展,并且插件的安装也很方便。如之前安装过的这个查看这个Visual GC的这个插件。打开这个Visual VM只需要找到jdk的安装目录下的bin目录,找到这个JVisual VM双击即可打开。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtW2OKQy-1684390467236)(img/1684137718101.png)]

又主要分为远程监控和本地监控,远程监控这里暂时不考虑,主要是本地监控,这里会监控着所有的jvm进程。

可以直接在进程右键生成堆Dump的快照文件和线程的快照文件,快照文件就类似于那一刻的一个截图。可以通过查看这个快照文件查看堆栈信息,死锁问题等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2swiJRS8-1684390467243)(img/1684199561538.png)]

除了堆栈之外,还可以对这个CPU和内存进行分析,也可以将此生成对应的快照。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-osklAfcT-1684390467243)(img/1684199936450.png)]

4,JProfiler(强)

在运行java的时候想测试内存的占用情况,这时候就需要用到测试工具。在eclipse里面有MAT插件可以测试,在idea中也有一个插件,就是JProfiler。相对于Visual VM,JProfiler这款工具相对而言更加强大,属于是非JDK自带的工具,因此需要进行付费才能使用。

JProfiler的功能强大,操作也比较友好,对被分析应用的影响小,对CPU,Thread,Memory分析功能强大,同时也支持jdbc,nosql,jsp,serverlet,socket等的操作,也支持监控本地和监控远程的操作。

通过这个JProfiler,可以有以下好处:

  • 在方法调用上分析程序正在做什么,并找到提高其性能的方法;
  • 在内存分配上,通过分析堆对象,引用链等修复内存泄漏的问题,从而优化内存使用;
  • 在线程和锁上,可以提供更多的相关视图来分析和发现多线程的问题;
  • 在高级子系统上,支持堆子系统进行集成分析,如集成JDBC、找出执行最慢的语句。

在本系列第9篇有讲解过这个JProfiler的安装教程,安装完这个插件之后,idea会显示在idea上面,https://blog.csdn.net/zhenghuishengq/article/details/130261481

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNpbln64-1684390467244)(img/1684217634865.png)]

我这边安装的是11的版本,其激活码为:S-J11-Everyone#553890-77gnvb3w8t9rd#4735

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIzNIfQ8-1684390467245)(img/1684218400742.png)]

在idea插件中安装完以及本地安装完成之后,需要在这个session集成idea,选择对应安装的idea即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yBXhURUk-1684390467246)(img/1684219328195.png)]

在安装完毕之后,点击这个JProfiler这个按钮,就会出现以下的界面,并且控制台会打印一些JProfiler的东西,随后直接点击ok即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEnDqnGR-1684390467246)(img/1684219916060.png)]

然后就会出现以下的画面,会实时的监控堆,CPU,线程,内存,类的总数,GC的时间点以及次数等等相关信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICnh54Gq-1684390467247)(img/1684220676401.png)]

接下来再模拟之前的那个死锁的程序

/**
 * @author zhenghuisheng
 * @date : 2023/5/12
 */
public class DeadBlockTest {
    public static void main(String[] args) {
        StringBuilder s1 = new StringBuilder();
        StringBuilder s2= new StringBuilder();
        new Thread(){
            @Override
            public void run() {
                synchronized (s1){
                    s1.append("a");
                    s1.append("b");
                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (s2){
                        s2.append("c");
                        s2.append("d");
                    }
                }
            }
        }.start();

        new Thread(){
            @Override
            public void run() {
                synchronized (s2){
                    s1.append("a");
                    s1.append("b");
                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (s1){
                        s2.append("c");
                        s2.append("d");
                    }
                }
            }
        }.start();
    }
}

其结果如下,会直接告知有两个线程死锁(真的强这个玩意)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U89wAquT-1684390467247)(img/1684221112359.png)]

里面还有很多功能,如通过图形以及图表查看内存泄漏的问题等等,可以安装JProfiler自行测试。

5,Arthas

上面的这几款工具应对日常开发已经足够,接下来再聊一款阿里的开源开发工具Arthas(阿尔萨斯)。改款工具可以不需要通过远程连接,也不需要配置监控参数,就可以对这些数据进行监控。其官方文档如下:arthas.aliyun.com/zh-cn/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-doShtNhl-1684390467248)(img/1684389172983.png)]

Arthas可以解决的问题如下:

  • 类从哪个jar包加载的,为什么会报这种异常,线上遇到问题时只能加日志重启吗
  • 线上用户数据处理有问题,线下无法重现如何解决
  • 是否有一个全局视角来查看系统的运行状况
  • 有什么办法可以监控到JVM的实时运行状态
  • 怎么快速定位到应用的热点,生成火焰图

其安装方式直接在浏览器输入该地址即可:https://alibaba.github.io/arthas/arthas-boot.jar ,等待片刻将其jar包下载即可,然后将下载的jar包传输到Linux服务器上,然后直接java -jar arthas-boot.jar 运行即可

arthas的基础的相关指令如下:

help: 查看帮助的指令
cat:  打印文件内容,和linux中的目录一样
echo: 打印参数,和linux里的tee相似
pwd:  返回当前目录
session: 查看当前回话信息
history: 打印历史命令

与jvm相关的指令如下:

dashboard:  当前系统的实时数据面板,可以加打印的总次数(-n)和间隔参数(-i)
thread:    查看当前JVM的线程堆栈信息
jvm:        查看当前JVM的信息
sysprop:   查看和修改JVM的系统属性
sysenv:    查看JVM的环境变量
getstatic: 查看类的静态属性
heapdump:  生成堆快照

与class和classLoader相关的信息

sc:          查看JVM已加载类的信息、
sm:         查看已加载类的方法的信息
jad:        反编译已加载类的源码
mc:         .java编译成.class
redifine:   加载外部的.class文件
classloader:查看类的加载器信息

与方法指令相关的信息

monitor:     方法执行监控,如调用次数,执行时间,失败率等
watch:       方法执行数据监测,如异常,返回值,入参等
trace:      方法内部调用路径,输出方法上面每个结点的耗时
stack:      输出当前方法被调用的调用路径

6,总结

在日常开发中,由于本人公司线上使用的是windows服务器,所以界面相对友好,在项目运行中更加的喜欢使用这个JProfiler工具,查看死锁,内存泄漏等问题,当然Arthas相对而言更加的适合在Linux服务器上使用。

除了这些可视化界面之外,还有如JMC、Flame Graphs、Btrace、YourKit、Jprobe、Spring Insight等等,都是可以使用的。

总而言之,没有最好的工具,只有最合适自己使用的开发工具。掌握Jconsole、JVisual VM,JProfiler 就基本能解决很多问题了,如果是线上出现很多疑难杂症,则可以再掌握一门Arthas

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

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

相关文章

五分钟学会Playwright录制脚本的方法以及语法难点

这篇文章系统地介绍了上手Playwright的方法,但是录制脚本部分讲解不够详尽,今天我在这里重点的介绍一下Playwright 录制脚本的方法来丰满我的Playwright系列技术文章。 Playwright可以使用codegen来录制脚本,使用方式非常简单,只…

Windows 安全基础

Windows 隐藏账号 命令行输入以下命令,可以进行简单的隐藏(命令行下不可见) net user test$ 123456 /add net localgroup administrators test$ /add 通过注册表隐藏用户(实现步骤如下): 要实现很好的…

文生图关键问题探索:个性化定制和效果评价

文生图(Text-to-Image Generation)是AIGC(AI Generated Content,人工智能生成内容)的一个主要方向。近年来,文生图模型的效果和质量得到飞速提升,投资界和研究界都在密切关注文生图模型的进展。…

二苯基环辛炔-生物素,DBCO-Biotin点击化学DBCO生物素;CAS:1418217-95-4

中文名称:二苯并环辛炔-生物素 英文名称:DBCO-Biotin CAS:1418217-95-4 分子式:C28H30N4O3S 分子量:502.63 性状:固体粉末 保存方法:-20℃避光避湿保存 点击化学DBCO发生在水中&#xff…

了解这3大特性,再也不担心传输线问题了!

电阻是一个实实在在的物理元器件,通过欧姆定律我们可以知道,电压、电流和电阻三者之间的关系,UI*R。 我们通过一个具体的电路来分析这三者之间的具体关系,请看下面的一张最简单的电路图。这个电路图只有一个电源一个电阻和一些导…

JVM如何安装IBM产品虚拟机openJ9和idea更换jvm

安装前提是卸载掉其他产品或版本的虚拟机防止冲突的发生 1.openJ9是IBM产品的虚拟机 1.1官网下载 1.2openJ9官网介绍 2.下载后的产品 3.点击安装–选择默认安装路径 默认路径–C:\Program Files\Semeru\ 3.1安装完成 4.配置jdk环境变量JAVA_HOME 5.配置Path–作用是在操作…

【游戏逆向】某某游戏邮件遍历分析

邮件常常用来远程交易,这样可以节省交易时间,并且降低数据的需求。邮件遍历的分析,一般是以邮件名字,邮件数量等为突破口。不过有些游戏的邮件名字并不存放在邮件对象中,或者在对象中也不会改变邮件的本地显示&#xf…

Canal搭建 idea设置及采集数据到kafka

Canal GitHub:https://github.com/alibaba/canal#readme 实时采集工具canal:利用mysql主从复制的原理,slave定期读取master的binarylog对binarylog进行解析。 canal工作原理 canal模拟MySQL slave的交互协议,伪装自己为MySQL slav…

tb-gateway配置modbus

1、在tb_gateway.yaml开启modbus连接器 2、配置modbus.json 2.1、配置文件示例 {"master": {"slaves": [{"host": "127.0.0.1","port": 5021,"type": "tcp","method": "socket",…

DBCO-Cy3,荧光染料标记点击化学二苯基环辛炔CAS 1782950-79-1;DBCO-Cyanine3分子量983.18

中文名称:二苯基环辛炔-CY3 中文别称:花菁染料CY3标记DBCO 英文名称:DBCO-CY3 英文别称:DBCO-Cyanine3 性状:红色固体或粉末 分子量:983.18 分子式:C50H54N4O11S3 CSA:1782950-79-1 激发…

ESP32-S3 N8R2 烧录调试记录

ESP32 型号:ESP32-S3-WROOM-1(M0N8R2) ESP32 烧录器型号:ESP Prog v1.0 IOTMCU 烧录器的开关按键是复位按键。 接线图如下: 注意:RX连 RX TX连TX EN连RST Arudion IDE 配置如下: 注意 Arudino 中使用串口为 Serial…

【计算机网络】| Http.*协议该知道的那些事儿 | 面经

本文章参考了很多文档文献整理成狮子自己喜欢的风格类型文字,主要有: 《图解网络-小林coding》、Github上面的《前端语音社群》,ChatGpt 3.5 大家有兴趣可以去找来看看,一起上岸!!! 目录 面试官…

leecode654——最大二叉树

leecode最大二叉树 🌻题目要求: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的…

数据信托:可信的数据流通模式

数据信托:可信的数据流通模式 黄京磊, 李金璞, 汤珂 清华大学社会科学学院经济学研究所,北京 100084 摘要:数据信托可被视作一种新型的、可信的数据流通模式。数据信托不仅是一种保障信息安全的组织结构,还是一种增进数据要素市场…

DreamGPT - 基于生成式AI的灵感激发器

dreamGPT是第一个利用LLM大模型的幻觉(hallucinations)进行发散思维的灵感激发系统,目的是帮助你产生新的创新想法。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 LLM的幻觉通常被视为大模型的缺陷,但如果这一特性可以…

什么是KD树?

一、什么是KD树? KD树(K-Dimensional Tree)是一种用于高效处理多维数据的数据结构。它是二叉搜索树的一种变体,在每个节点上对数据进行分割,从而构建一个多维空间的层次结构。 因为KD树是基于二叉搜索树的特性构建的&…

【C++初阶】C++内存分配与动态内存管理

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C初阶 🎯长路漫漫浩浩,万事皆有期待 文章目录 C内存分配与动态内存管…

端口扫描的CS木马样本的分析

序言 病毒、木马是黑客实施网络攻击的常用兵器,有些木马、病毒可以通过免杀技术的加持躲过主流杀毒软件的查杀,从而实现在受害者机器上长期驻留并传播。 CobaltStrike基础 Cobalt Strike简称CS,它是一款非常好用的渗透测试工具&#xff0c…

网络编程--select实现IO复用

何为复用 简单来说,复用就是在1个通信频道中传递多个数据的技术。 常见的复用方式有时分复用和频分复用。 时分复用:即在某一时间段内容,只允许传输一个数据。 频分复用:指的是在某一时间段可以传输多个“频率”不同的数据。 …

朱金宝:数据治理产品发展趋势及Datablau产品最新动态

在刚刚结束的2023数据治理新实践峰会上,Datablau数语科技联合创始人&CTO朱金宝先生分享了对数据治理产品发展趋势的深度思考及Datablau新产品预览,并在现场发布了两款最新工具。 以下是朱金宝先生的演讲实录,为了方便阅读,小…