JConsole-的使用

news2025/1/6 8:52:10

文章目录

  • 一、简介
  • 二、使用
    • 2.1 启动 JConsole
    • 2.2 连接到 Java 进程
      • 2.2.1 本地连接
      • 2.2.2 远程连接
    • 2.3 监控 JVM 资源


一、简介

JConsole 是一种 Java 监控和管理控制台工具,可以用于监视 Java 虚拟机(JVM)的性能和资源利用情况。它提供了一种图形化界面,可以实时查看 JVM 的运行状态、内存使用情况、线程活动、垃圾回收等信息,以及执行一些管理操作。

使用 JConsole 可以帮助开发人员和系统管理员进行性能调优、内存泄漏排查和故障诊断,从而提高应用程序的可靠性和性能。

在这里插入图片描述

总之,JConsole 是一个强大的 Java 监控和管理工具,可以帮助开发人员和系统管理员实时监控和管理 Java 应用程序的性能和资源利用情况。


二、使用

如果你没有安装 JDK ,可参见博客:

  • windows:java-环境配置(详细教程)
  • linux:Linux-java环境配置

下面是 JConsole 的使用步骤:

  1. 启动 JConsole:JConsole 是包含在 JDK 中的一个工具,因此首先要确保已经安装了 JDK。然后,在命令行中输入 jconsole 命令或者双击 jconsole.exe 启动 JConsole 。

  2. 连接到 Java 进程:启动 JConsole后,会弹出一个界面,显示所有正在运行的 Java 进程。选择要监控的 Java 进程,并点击 连接 按钮。

  3. 监控 JVM:连接成功后,JConsole 提供了多个选项卡,用于监控各种 JVM 资源。常用的选项卡包括:

    • 概览(Overview):显示 JVM 的概览信息,如内存使用情况、线程数、类加载器信息等。

    • 内存(Memory):显示 JVM 的内存使用情况,包括堆内存、非堆内存、内存池等。

    • 线程(Threads):显示 JVM 中的线程活动情况,包括线程数、线程状态、死锁等。

    • 类(Classes):显示 JVM 加载的类信息,包括已加载类的数量、被卸载的类数量等。

    • VM 概要(VM Summary):显示JVM的基本信息,如 JVM 的启动参数、命令行参数等。

    • MBean:显示了所有在 platform. MBeanserver 上注册的 MBeans 的信息。

    • 执行操作:除了监控功能外,JConsole 还可以执行一些管理操作。例如,可以通过 JConsole 执行垃圾回收、线程Dump、线程死锁检测等操作。

这些操作可以通过点击相应的按钮执行。


2.1 启动 JConsole

在 windows 下我们可以直接找到 JDK 的所在目录,去 /bin 目录下找到 jconsole.exe 双击运行即可

在这里插入图片描述

如果你正确的配置好 Java 环境的话,win + R 打开 命令提示符 窗口,输入 jconsole 命令也是能打开的

在这里插入图片描述


2.2 连接到 Java 进程

启动之后可以看到界面上有两个选择,一个是 本地进程 ,另一个是 远程进程

  • 本地进程:相对于开启 JConsole 的计算机,无需设置任何参数就可以被本地开启的 JConsole 连接(Java SE 6 之后无需设置,之前还要设置运行时参数 -Dcom.sun.management.jmxremote
  • 远程进程:输入远程连接地址,格式是 ip:port(注意 port 是监听端口不是服务端口)和用户名、口令(如果需要)即可连接进入监听界面。

2.2.1 本地连接

在这里插入图片描述

在本地进程中会展示出当前计算机所有正在运行的 Java 程序,只需选中双击进入,再点击 不安全的连接

在这里插入图片描述

即可进入到监听界面

在这里插入图片描述


2.2.2 远程连接

远程连接要到服务器上,加入以下启动参数之后,重启项目

# 远程服务器ip,即本机ip,不建议用 localhost、127.0.0.1
-Djava.rmi.server.hostname=XXX.XXX.XXX.XXX 
# 允许 JMX 远程调用
-Dcom.sun.management.jmxremote
# 自定义 JMX 端口号
-Dcom.sun.management.jmxremote.port=8899
# 是否需要 ssl 安全连接方式
-Dcom.sun.management.jmxremote.ssl=false
# 是否需要密钥
-Dcom.sun.managent.jmxremote.authenticate=false

例如:

java 
-Dcom.sun.management.jmxremote.port=8899 
-Dcom.sun.managent.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-jar xxx.jar

注意:这个端口号不能与程序端口一样,需要单独的,不重复的端口号,否则会报端口被占用 的错误,还有就是你服务器的防火墙没关的话还要在防火墙中开发该端口,其次如果你使用的服务器是云服务器的话,还需要在云服务器上开发该端口。

其次还需要创建 jmxremote.password 文件,用于控制远程连接用户名和密码的。

可以在 %JAVA_HOME%/jre/lib/management 目录下查看是否有 jmxremote.password 文件,如果没有的话可以通过该目录下的jmxremote.password.template 文件为原型复制一个

cp jmxremote.password.template jmxremote.password

然后编辑 jmxremote.password 文件

vim jmxremote.password

修改最下面的两行,把注释 # 去掉

# monitorRole  QED
# controlRole   R&D

在这里插入图片描述

monitorRole 是查看角色(也是登录用户名,在 access 文件中),拥有只读权限,QED 是设置的密码。
controlRole 是控制用户(也是登录用户名,在 access 文件中),拥有读写权限,R&D 是设置的密码。

最后对该文件赋权即可:

chmod 600 jmxremote.password

连接:

在这里插入图片描述

在这里插入图片描述

连接成功如图所示:

在这里插入图片描述


2.3 监控 JVM 资源

概览:

连接成功之后,JConsole 将会显示应用程序的概览信息,在概览标签页可以查看程序的垃圾回收、类加载、线程等信息。

在这里插入图片描述

内存:

显示 JVM 的内存使用情况,包括堆内存、非堆内存、内存池等。

在这里插入图片描述

内存 界面具有 执行GC 按钮,可以随时单击该按钮以执行垃圾回收。同时还能通过点击 图表-下拉选项 或者单击 右下角内存图 切换所要监控的内存区。

Java VM 管理两种内存:堆内存和非堆内存,这两种内存都是在 Java VM 启动时创建的。

  • (1)堆内存:是运行时数据区,在虚拟机启动时就会被创建,它存储了被自动内存管理系统(Automatic Storage Management System,也就是常说的 Garbage Collector 垃圾收集器)所管理的各种对象,这些受管理的对象无需也无法显式地被销毁。堆的容量可以是固定大小的,也可以随着程序执行的需求动态扩展,并在不需要过多空间时自动收缩,堆所使用的内存亦不需要保证是连续的。

    • 内存模型:
      在这里插入图片描述

    • 堆内存可被分为两大区域:

      • 新生代(Young/New Generation):新生对象放置在新生代中,新生代由 EdenSurvivor Space 组成。EdenSurvivor Space 的空间大小比例默认为 8:1,即当 Young/New Generation 区域的空间大小总数为 10M 时,Eden 的空间大小为 8M,两块 Survivor Space 则各分配 1M,这个比例可以通过 -XX:SurvivorRatio 参数来修改。Young/New Generation 的大小则可以通过 -Xmn 参数来指定。
        • Eden:伊甸区,对象被创建的时候首先放到 Eden 区中,进行垃圾回收后,不能被回收的对象被放入到空的 Survivor 区域。
        • Survivor Space:幸存者区,用于保存在 Eden 内存区域中经过垃圾回收后没有被回收的对象。Survivor Space 分为两个空间大小一样的区域,分别是 s0s1 ,当触发 Minor GC 后将仍然存活的对象移动到 s0 中去(From Eden To s0),这样 Eden 就被清空可以分配给新的对象;当再一次触发 Minor GC 后,s0Eden 中存活的对象被移动到 s1 中(From s0 To s1),s0 即被清空,在同一时刻,只有 Eden 和一个 Survivor Space 同时被操作,所以 s0s1 这两块 Survivor 区同时会至少有一个为空闲的。
      • 老年代(Old/Tenured Generation):老年代用于存放程序中经过几次垃圾回收后还存活的对象,也可能是新生代分配不了内存的大对象会直接进入老年代,例如缓存的对象等,老年代所占用的内存大小为 -Xmx-Xmn 两个参数之差。
    • 默认情况下,新生代(Young)与老年代(Old)的比例值为 1:2 (该值可以通过参数 -XX:NewRato 来指定),即:新生代(Young)= 1/3 的堆内存空间大小,老年代(Old) = 2/3 的堆空间大小。其中,新生代(Young)被细分为 Eden 和两个 Survivor 区域,默认 Eden:s0:s1 = 8:1:1(可以通过参数 -XX:SurvivorRatio 来设定)。堆内存的整个大小 = 年轻代大小 + 老年代大小,堆内存默认为物理内存的 1/64(<1GB),在默认情况下空余堆内存小于 40% 时,JVM 就会增大堆直到 -Xmx 的最大限制,可以通过 MinHeapFreeRatio 参数进行调整;默认空余堆内存大于 70% 时,JVM 会减少堆直至 -Xms 的最小限制,可以通过 MaxHeapFreeRatio 参数进行调整。

  • (2)非堆内存:包括在 Java VM 的内部处理或优化所需的所有线程和内存之间共享的方法区,它存储每类结构,例如运行时常量池,字段和方法数据,以及方法和构造函数的代码,方法区在逻辑上是堆的一部分,但是根据实现,Java VM 可能不会垃圾收集或压缩它,跟堆存储器一样,方法区可以是固定的或可变的大小,方法区的内存不需要是连续的。

    • 可分为:
      • Metaspace:元空间,是方法区在 HotSpot jvm 中的实现,方法区主要用户存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫 非堆
      • Code Cache:HotSpot Java VM 还包括代码缓存,其中包含用于编译和存储本机代码的内存。
      • Compressed Class Space:压缩类空间

线程:

显示 JVM 中的线程活动情况,包括线程数、线程状态、死锁等。

在这里插入图片描述

红色:峰值线程数
蓝色:活动线程数

左下角的线程列表列出了所有活动线程,选中 线程 单击,会显示有关该线程的信息,包括线程名称,状态和堆栈跟踪。

点击 检测死锁 可以检测出死锁

在这里插入图片描述

类:

显示 JVM 加载的类信息,包括已加载类的数量、被卸载的类数量等。

在这里插入图片描述

红色:加载的类的总数(包括随后卸载的类)
蓝色:当前加载的类的数量

详细信息 部分显示自 Java VM 启动以来加载的类的总数,当前加载的数量和卸载的数量。

可以通过选择 时间范围-下拉框 来查询指定时间范围的类加载情况。

VM 概要:

显示JVM的基本信息,如 JVM 的启动参数、命令行参数等。

在这里插入图片描述

MBean:

显示了所有在 platform. MBeanserver 上注册的 MBeans 的信息。

在这里插入图片描述

左边的树形结构显示了所有的 MBean,选择了一个 MBean 之后,其属性、操作、通知和其他信息会在右边显示。


参考博客:

java 性能分析 jconsole 详解:https://jishu.zuankewang.com/24934/
Jconsole 使用:https://www.cnblogs.com/walkersss/p/17476083.html
jconsole 远程连接的使用:https://blog.csdn.net/interestANd/article/details/127390435
Jconsole 使用 - 慕尘:https://www.cnblogs.com/baby123/p/11395760.html
Java 堆内存 (Heap):https://www.pianshen.com/article/1576134841/

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

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

相关文章

汉字姓名转拼音

import osimport pandas as pdfrom xpinyin import Pinyindownpath/Users/Kangyongqing/Downloads/ file1教师姓名转拼音.xlsxdtpd.read_excel(downpathfile1) print(dt.info()) dt[pinyin]dt[教师姓名].apply(lambda x:Pinyin().get_pinyin(x).split(-)[0].capitalize() .join…

antd select multiple模式 Dropdown onClick 失效

背景&#xff1a;当 Ant Design 的下拉菜单&#xff08;Dropdown&#xff09;在默认情况下从下方弹出&#xff0c;在某些情况下可能会因为页面空间不足而自动切换到上方弹出。这种位置变动可能导致点击事件无法触发。 复现描述&#xff1a;当输入搜索时&#xff0c;option会筛…

几乎与人类无异,机器人手通过触摸感知物体

原创 | 文 BFT机器人 人类即使在看不清物体的情况下也能够毫不费力的感知抓取物体&#xff0c;受到这一启发&#xff0c;加州大学圣迭戈分校工程师领导的研究小组开发出了一种新方法&#xff0c;使机械手能够不依赖视觉&#xff0c;仅通过触摸就能感知旋转物体。 利用他们的技…

什么是OCR?OCR技术详解

光学字符识别(Optical Character Recognition)简称为“OCR”。ORC是指对包含文本资料的图像文件进行分析识别处理&#xff0c;获取文字及版面信息的技术。 一般包括以下几个过程&#xff1a; 1.图像输入 针对不同格式的图像&#xff0c;有着不同的存储格式和压缩方式。目前&…

HTML,url,unicode编码

目录标题 HTML实体编码urlcode编码unicode编码小结基础例题高级例题 HTML实体编码 实体表示&#xff1a; 以&符号开始&#xff0c;后面跟着一个预定义的实体的名称&#xff0c;或是一个#符号以及字符的十进制数字。 例&#xff1a; <p>hello</p> <!-- 等同…

【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )

文章目录 一、RDD#sortBy 方法1、RDD#sortBy 语法简介2、RDD#sortBy 传入的函数参数分析 二、代码示例 - RDD#sortBy 示例1、需求分析2、代码示例3、执行结果 一、RDD#sortBy 方法 1、RDD#sortBy 语法简介 RDD#sortBy 方法 用于 按照 指定的 键 对 RDD 中的元素进行排序 , 该方…

pp-ocr报错记录

RESER 报错&#xff1a; distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse(‘tomli>1.0.0’) 解决办法&#xff1a; 参考&#xff1a;https://stackoverflow.com/questions/67603407/distutilserror-could-not-find-suitable…

golang函数传参——值传递理解

做了五年的go开发&#xff0c;却并没有什么成长&#xff0c;都停留在了业务层面了。一直以为golang中函数传参&#xff0c;如果传的是引用类型&#xff0c;则是以引用传递&#xff0c;造成这样的误解&#xff0c;实在也不能怪我。我们来看一个例子&#xff0c;众所周知&#xf…

享元模式 Flyweight Pattern 《游戏编程模式》学习笔记

如果我们要存储一个树一样的数据结构&#xff0c;直觉来说我们会这么写 但是实际上我们会发现&#xff0c;哪怕森林里有千千万万的树&#xff0c;它们大多数长得一模一样。 它们使用了相同的网格和纹理。 这意味着这些树的实例的大部分字段是一样的。 那么我们就可以将树共…

C语言自定义类型 — 结构体、位段、枚举、联合

前言 本期主要对通讯录三篇博客文章进行补充 通讯录文章&#xff1a;通讯录系列文章 对结构体进行详细介绍&#xff0c;其次讲解位段、枚举、联合体 文章目录 前言一、结构体1.什么是结构体2.结构声明2.1 声明格式2.2 如何声明&#xff08;代码演示&#xff09; 3.特殊声明3.1…

css word-break

上面的一行还是可以放置很多个字符的&#xff0c;但是就是换行了。 要求填充满整行&#xff0c;超过在换行 加上word-break:break-all;就行

每日汇评:由于美国就业数据强劲,黄金可能恢复下行趋势

1、美国非农就业数据公布前&#xff0c;金价试图从三周低点反弹&#xff1b; 2、美国经济数据喜忧参半&#xff0c;推动美元和美债收益率回落&#xff1b; 3、金价上行空间有限&#xff0c;因日技术面走势偏空&#xff1b; 金价又将下跌一周&#xff0c;周五有望创下六周以来…

浅谈小区电动汽车充电桩管理系统设计及应用

安科瑞 华楠 摘要&#xff1a;提出了针对数量众的充电桩计算充电负荷时所需需要系数的一种替代方法&#xff0c;阐述了二者适用背景的相似性&#xff0c;并针对其可行性进行了相关论述。数發众的新能源汽车在相对集中的时间充电&#xff08;尤其是与居民用电高峰重的惰况下&…

测试人员简单使用Jenkins

一、测试人员使用jenkins干什么&#xff1f; 部署测试环境 二、相关配置说明 一般由开发人员进行具体配置 1.Repository URL&#xff1a;填写git地址 2.填写开发分支&#xff0c;测试人员可通过相应分支进行测试环境的构建部署 当多个版本并行时&#xff0c;开发人员可以通过…

devops-发布vue前端项目

回到目录 将使用jenkinsk8s发布前端项目 1 环境准备 node环境 在部署jenkins的服务器上搭建node环境 node版本 # 1.拉取 https://nodejs.org/download/release/v20.4.0/node-v20.4.0-linux-x64.tar.gz# 2.解压到/usr/local目录下 sudo tar xf v20.4.0.tar.gz -C /usr/loc…

唐刘:TiDB 研发工程实践及 TiDB 人才观丨CCF 中国数据库暑期学校

在刚刚结束的 CCF 中国数据库暑期学校上&#xff0c; PingCAP 的研发副总裁唐刘分享了在 TiDB 研发过程中的工程实践经验和人才培养方法。目前&#xff0c;TiDB 已广泛应用于各行各业&#xff0c;有着庞大的用户基数&#xff0c;面临多样化的数据处理需求。PingCAP 通过开源、敏…

Datax 数据同步-使用总结(一)

1&#xff0c;实时同步&#xff1f; datax 通常做离线数据同步使用。 目前能想到的方案 利用 linux 的定时任务时间戳的方式做增量同步。 2&#xff0c;同步速度快不快&#xff1f; 单表同步速度还是挺快的 但是如果遇到复杂的 sql 查询&#xff0c;其同步效率&#xff0c…

企业数字化转型:信息化还是数字化?

面对巨大的数字经济市场&#xff0c;全球大部分企业都开始了数字化转型进程&#xff0c;国内一半以上的企业已经将数字化转型视为下一步发展重点&#xff0c;并制定了清晰的数字化转型战略规划。 但是&#xff0c;相当一部分传统行业&#xff0c;如制造、金融、能源、化工等非数…

使用ngrok实现内网穿透

前言&#xff1a;因为公司对接的某个项目要搭建一个测试环境&#xff0c;所以使用内网穿透的方式来搭建。非常方便&#xff0c;而且还节省资源&#xff0c;最重要的是免费啊这个工具。 ngrok官网&#xff1a;https://ngrok.com/ 点击下载&#xff0c;很快就能下好。 下好之…

Postman(接口测试工具)

目录 一.基本介绍 1.Postman 是什么 2.Postman 快速入门 2.1快速入门需求说明 二.Postman 完成 Controller 层测试 需要的代码&#xff1a; Java类 request.jsp success.jsp 1. 完成请求 2. 完成请求 3. 完成请求 4. 完成请求 5. 完成请求 三.发送join 一.基本介…