JVM虚拟机性能监控工具

命令行工具

jps

虚拟机进程状况查询工具

jps(JVM Process Status Tool),可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称或者jar文件名,还有这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。

image-20240102213901208

image-20240102213958333

# Windows找出正在运行的java程序
tasklist /fi "imagename eq java.exe"

# linux系统找出正在运行的java程序
ps -ef | grep java

image-20240102213758370

# hostid为远程主机的标识符,需要远程主机在RMI中注册过
jps [options] [hostid]

options作用
-q仅显示进程id,不显示类名、jar名称等信息
-l显示主类的全限定名称,或者启动的jar文件名称
-m显示传递给main方法的参数
-v显示虚拟机进程启动的JVM参数

jstat

虚拟机统计信息监控工具

jstat(JVM Statistics Monitoring Tool)用户监控虚拟机各项运行状态的工具,如类加载、内存、垃圾收集、即使编译器等运行时数据。

# 本地虚拟机的vmid和lvmid是一致的
# 远程虚拟机的vmid格式[protocol:][//]vmid[@hostname[:port]/servername]
# interval count 表示间隔多长时间输出,总共输出多少次,不传默认只输出一次
jstat <option> <vmid> [interval[s|ms] [count] ]

image-20240102220430864

 jstat -gc <pid>
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
26176.0 26176.0  0.0   2160.1 209792.0 165183.1  262144.0   69936.9   131072.0 123923.2 16384.0 15168.7    451    4.319  198    52.246   56.565

jstat -gccause <pid>
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
  0.00   0.00   9.23  26.73  94.55  92.59    453    4.328   289   76.291   80.619 CMS Final Remark     No GC               


列名含义
S0CSurvivor0区域的容量
S1CSurvivor1区域的容量
S0USurvivor0区域的使用量
S1USurvivor1区域的使用量
ECEden区域的容量
EUEden区域的使用量
OC老年代的容量
OU老年代的使用量
MC表示Metaspace(元空间)区域的容量
MU表示Metaspace(元空间)区域的使用量
CCSC压缩类空间的容量
CCSU压缩类空间的使用量
YGC年轻代垃圾回收次数
YGCT年轻代垃圾回收的总时间(秒)
FGC老年代垃圾回收次数
FGCT老年代垃圾回收的总时间(秒)
GCT表示垃圾回收的总时间(秒)
option作用
-class监控类加载、卸载数量、总空间及类加载所耗费的时间
-gc监控Java堆状况,Eden、2个Survivor、老年代等使用情况,垃圾收集时间
-gccapacity和gc相差不大,主要关注Java堆中各个区域使用到的最大最小空间
-gcutil和gc相差不大,关注各个空间的使用占比
-gccause与gcutil功能一样,会额外输出导致上一次GC产生的原因
-gcnew监控新生代垃圾收集情况
-gcnewcapacity与gcnew相差不大,主要关注使用到的最大和最小空间
-gcold监控老年代垃圾收集情况
-gcoldcapacity
-gcpermcapacityJDK8移除
-compiler输出即时编译器编译过的方法耗时等信息
-printcpmpilation输出已经被即时编译器编译的方法

jinfo

配置信息工具

jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机各项参数。

# pid-进程id
jinfo <option> pid

# -flag MetaspaceSize=256m -flag MaxMetaspaceSize=512m
jinfo -flag +UseStringDeduplication  <pid>

可以通过jinfo -flag获取可选参数

image-20240103210504044

option作用
-flag JVM参数名称name虚拟机启动对应JVM参数的配置
-flag [+|-] JVM参数名称name去激活或关闭某个JVM参数开关
-flag name=value设置对应JVM参数的值
-flags打印对应JVM虚拟机进程的启动信息
-sysprops打印Java经常System.getProperties()的内容信息
打印-flags 和-sysprops对应的信息

image-20240103211649693

jmap

内存镜像工具

jmap(Memory Map for Java)名用于生成堆转存快照(heapdump或dump文件)。

通过JVM参数-XX:+HeapDumpOnOutOfMemoryError,在Java程序出现内存溢出错误之后自动生成demp文件。

通过JVM参数-XX+HeapDumpOnCtrlBreak参数可以使用ctrl+break让虚拟机生成dump文件,或者在Linux系统使用kill -3命令。

# 虚拟机进程id,一般情况下同进程id
jmap <option> vmid

jmap -dump:[live,]format=b,file=<filename>.hprof vmid
jmap -dump:[live,]format=b,file=<filename>.bin vmid

image-20240103213851585

option作用
-dumplive只dump出存活的对象,format=b表示文件内容为二进制文件,file表示转存的文件名
-finalizerinfofinalize队列中等待执行的对象。对象要实现finalize方法才会进入
-heap显示堆详细信息,哪种回收器、参数配置合集容量
-histo显示堆中对象统计信息、包括类、实例数量、合计容量
-permstat以ClassLoader为统计口径显示永久代内存容量(1.8弃用)
-clstats打印类加载统计的信息
-F-dump选项没有作用时,前置生成dump文件

image-20240103213655456

image-20240103214630314

jhat

堆转存快照分析攻击

jhat(JVM Heap Analysis Tool)来分析jmap生成的dump文件。jhat内置了一个http/web服务器,生成堆转存快照文件之后,可以在浏览器查看。这个直接看,是真的看不懂。

jhat dump文件

image-20240103215207191

image-20240103215358948

jstack

Java堆栈跟踪工具

jstack(Stack Trace for Java)用于生成当前时刻的线程快照(threaddump或javacore文件)。

线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的作用通常是定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部资源导致的长时间挂起等。

Thread.getAllStackTraces()可以获取虚拟机所有线程的StackTraceElement对象。

jstack <option> vmid

image-20240103221457412

option作用
-F当正常输出不被响应,强制输出线程堆栈信息
-l出堆栈外,显示关于锁的附加信息
-m调用到本地方法,可以显示C/C++的堆栈

image-20240103222239992

Service Thread是线程的名称

#19是线程的id

daemon表示是守护线程(在main介绍自动退出)

prio=9表示线程的优先级

os_prio表示操作系统级别线程的优先级

tid=0x00000000140b8800表示线程的本地id

nid=0xa2c表示操作系统层面线程的本地id

runnable表示线程处于可运行状态

0x0000000000000000是线程堆栈的起始地址

java.lang.Thread.State: RUNNABLE表示线程的状态,RUNNABLE表示当前线程正在运行或者可运行

Locked ownable synchronizers表示线程有用的同步锁的信息,-None表示未拥有任何锁。

image-20240103223149196

image-20240103223205647

可视化工具

JHSDB

image-20240104193532949

在JDK9版本才开始支持。

JHSDB(Java HotSpot Debugger)是Java HotSpot虚拟机的调试工具,运行开发人员在运行时检查和调试Java程序。

jhsdb hsdb --pid <vmid>

image-20240104200056599

image-20240104200305358

image-20240106141539683

Heap Parameters

Tool => Heap Parameters,可以看到下面Gen 0Enen区内存已经使用满了。S0、S1、老年代都没有被使用。

image-20240104200628142

scanoops start end [type]
scanoops 0x0000020c2ec00000 0x0000020c2ef50000 Object #使用这个提示找不到这个类型 no usch type
scanoops 0x0000020c2ec00000 0x0000020c2ef50000 java.lang.Object

image-20240104201423124

Inspector

可以使用Tool => Inspector工具查看对象的类名、继承关系、实现接口关系、方法、字段、运行时常量池的指针

image-20240104201557779

image-20240104202228713

revptrs

revptrs查找对象的指针引用。

revptrs 对象地址 # 下面结果输出哪个类型的对象引用了它
revptrs 0x0000020c2eea92f8 # Object staticObject
revptrs 0x0000020c2eea9308 # JHSDBTest jhsdbTest
revptrs 0x0000020c2eea9320 # Object instanceObject
revptrs 0x0000020c2eea9330 # Object obj

可以先猜测一下92f8这个Object对象应该是一个静态遍历,因为这个和Class相关,可以取0x0000020c2eea8db0使用Inspector工具检查,发现其中真的是有一个staticObject对象地址也是对上的。这也验证了Java将静态属性存储在Class对象中,存储在Java堆(这里Eden)中。

0x0000020c2eea9320看结果和0x0000020c2eea9308,这个对象应该是JHSDBTest的实例属性。Inspector下图结果可验证。

看到main方法里面对象没有任何执行,猜测0x0000020c2eea9330这对象应该是在方法里面那个Object对象。

可以有一个小的总结,在方法里面的局部变量,他是没有一个具体的指向的,意味着方法结束这个对象就找不到了,可能就会被垃圾收集器收集。

资料说:revptrs不支持查找栈上面的指针引用。

image-20240104203144313

image-20240104203452369

image-20240104203931334

Stack Memory

Java Threads窗口可以查看线程的栈内存使用情况。怎么看这个图?

image-20240104204930815

image-20240104205400203

Stack Memory图怎么看?

JConsole

工具使用官网文档:https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html

JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Management Extensions)规范的可视化监视、管理工具。

Java Management Extensions(JMX)是一种用于管理和监视Java应用程序的框架。它允许开发人员在应用程序中集成管理功能,以便远程或本地监控和管理Java应用程序的运行时行为。JMX提供了一组标准接口和工具,使得可以在运行时动态地管理Java应用程序的各个方面,包括性能监控、配置管理、事件通知等。

使用JMX,开发人员可以将MBeans(Managed Beans)嵌入到他们的应用程序中,这些MBeans代表了应用程序的不同组件或模块。这些MBeans可以通过JMX代理进行注册,然后可以通过JMX管理器远程或本地访问这些MBeans,以获取有关应用程序状态、性能和配置的信息,并且可以执行一些管理操作。

使用jconsole连接远程服务器上的Java程序,在启动时,需要加上其它特别的参数。

image-20240106140346147

# 远程启动需要的参数
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \  # 替换为您选择的端口号
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \

image-20240106141305933

内存监控

可以观察到堆内存占用在慢慢提高,然后突然降低,而后又慢慢提高,然后再降低。

第一次的慢慢提高是因为method方法指向,又对象在不停的创建,方法指向完成之后,代码中手动触发了GC,method方法创建的对象被回收,所以内存占用降低。

第二次慢慢提高不知道为什么,降低是因为手动点了监控界面的执行GC

image-20240106141251550

线程监控

image-20240106142931268

线程死循环

image-20240106143036617

线程死锁

image-20240106143226130

image-20240106143246410

image-20240106143440648

VisualVM

export https_proxy=http://127.0.0.1:33210 http_proxy=http://127.0.0.1:33210 all_proxy=socks5://127.0.0.1:33211

VisualVM是一个用于监控、分析和调优Java虚拟机(JVM)性能的可视化工具。

image-20240106144818003

image-20240106144849506

关门的默认打开窗口可以在窗口=>应用程序/充值窗口重新打开。

image-20240106150246762

远程插件

image-20240106145611047

需要手动下载再安装插件

线程监控

image-20240106150813719

Java Mission Control

Java Mission Control(JMC)是一个用于监控和管理Java应用程序性能的工具,通常与Java Flight Recorder(JFR)结合使用。

image-20240106151834669

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js 与 TypeScript(1) :项目配置、props标注类型、emits标注类型

像 TypeScript 这样的类型系统可以在编译时通过静态分析检测出很多常见错误。这减少了生产环境中的运行时错误&#xff0c;也让我们在重构大型项目的时候更有信心。通过 IDE 中基于类型的自动补全&#xff0c;TypeScript 还改善了开发体验和效率。 一、项目配置 在使用 npm cr…

AI 网页解锁器,用于网页抓取一切 | 最快的验证码解决服务

想象一下&#xff0c;解锁互联网的全部潜力&#xff0c;数据自由流动&#xff0c;没有任何障碍阻挡你获取所需信息。在网络爬虫的世界里&#xff0c;这个梦想常常会遇到障碍&#xff1a;CAPTCHA和反机器人措施&#xff0c;这些措施旨在保护网站免受自动化访问的侵害。但如果有一…

蓝桥杯软件测试-十五届模拟赛2期题目解析

十五届蓝桥杯《软件测试》模拟赛2期题目解析 PS 需要第十五界蓝桥杯模拟赛2期功能测试模板、单元测试被测代码、自动化测试被测代码请加&#x1f427;:1940787338 备注&#xff1a;15界蓝桥杯省赛软件测试模拟赛2期 题目1&#xff1a;功能测试题目 1&#xff08;测试用例&…

60 关于 SegmentFault 的一些场景 (1)

前言 呵呵 此问题主要是来自于 帖子 月经结贴 -- 《Segmentation Fault in Linux》 这里主要也是 结合了作者的相关 case, 来做的一些 调试分享 当然 很多的情况还是 蛮有意思 本文主要问题如下 1. 访问可执行文件中的 只读数据 2. 访问不存在的虚拟地址 3. 访问内核地址…

【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析

在计算机视觉领域&#xff0c;物种识别和图像相似度比较是两个重要的研究方向。本文通过结合深度学习和图像处理技术&#xff0c;基于OpenCV和TensorFlow的MobileNetV2的预训练模型模&#xff0c;实现物种识别和个体相似度分析。本文详细介绍该实验过程并提供相关代码。 一、名…

Python代码:二十六、反转列表

1、题目 描述 小明有一个列表记录了各个朋友的喜欢的数字&#xff0c;num [3, 5, 9, 0, 1, 9, 0, 3]&#xff0c;请你帮他创建列表&#xff0c;然后使用reverse函数将列表反转输出。 输入描述&#xff1a; 无 输出描述&#xff1a; 第一行输出创建好的原始的列表&#x…

typescript --object对象类型

ts中的object const obj new Object()Object 这里的Object是Object类型&#xff0c;而不是JavaScript内置的Object构造函数。 这里的Object是一种类型&#xff0c;而Object()构造函数表示一个值。 Object()构造函数的ts代码 interface ObjectConstructor{readonly prototyp…

【JavaEE】JVM中垃圾回收机制详解

一.垃圾回收的基本概念 1.什么是垃圾回收机制. JVM&#xff08;Java虚拟机&#xff09;垃圾回收机制是Java内存管理的重要组成部分&#xff0c;它负责自动回收程序中不再使用的对象所占用的内存空间。这样可以有效地防止内存泄漏和内存溢出问题&#xff0c;提高程序的稳定性和…

电脑死机问题排查

情况描述&#xff1a;2024年6月2日下午16&#xff1a;04分电脑突然花屏死机&#xff0c;此情况之前遇到过三次&#xff0c;认为是腾讯会议录屏和系统自带录屏软件冲突导致。 报错信息&#xff1a;应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址…

GPT-4o有点坑

GPT-4o有点坑 0. 前言1. GPT-4o简介2. GPT-4o带来的好处2.1 可以上传图片和文件2.2 更丰富的功能以及插件 3. "坑"的地方3.1 使用时间短3.2 GPT-4o变懒了 4. 总结 0. 前言 原本不想对GPT-4o的内容来进行评论的&#xff0c;但是看了相关的评论一直在说&#xff1a;技…

全国水系数据(更新到2024年5月)

上海市水系数据地图可视化 水系数据线图层&#xff08;小河/溪流、江/河、运河、下水道/排水管&#xff09; 水系数据面数据&#xff08;水域、水库、河岸、湿地&#xff09; 水系数据字段说明 可视化预览 北京市水系可视化 上海市水系可视化 广州市水系可视化 深圳市水系可视化…

Gin的快速入门和搭建

文章目录 Go的工程工程架构技术选型 Gin入门 Go的工程 基于Go生态&#xff0c;构建一个支持内容管理&#xff0c;内容加工、内容分发的内容库系统。 内容管理&#xff1a;增删改查内容加工&#xff1a;例如内容审核、推荐等内容分发&#xff1a;将内容可以推到不同的业务线 …

用例篇03

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

集成学习算法笔记

一、引言 在机器学习和数据分析领域&#xff0c;集成学习算法因其能够显著提高模型预测性能而备受关注。然而&#xff0c;任何算法在应用过程中都不可避免地会遇到一些挑战和问题&#xff0c;集成学习算法也不例外。其中&#xff0c;最为常见且关键的两大问题便是欠拟合&#…

软考高级系统规划与管理师适合什么人考?有什么优势?

系统规划与管理师适合什么人考&#xff1f; 适合以下几类人群&#xff1a; 1. 信息技术服务规划人员&#xff1a;从事信息技术服务规划工作&#xff0c;负责制定和优化IT服务规划的人 2. 信息系统运行维护管理人员&#xff1a;负责信息系统日常运行维护、确保系统稳定性和可…

【Pr剪辑】01新建项目起步

【Pr学习】01新建项目起步 1、新建项目2.序列设置2.1新建序列2.2序列参数讲解2.3自定义设置 3.PR窗口认识3.1 项目窗口3.2 源窗口2.4 保存面板 4.剪辑导入4.1 素材导入4.2 视图切换4.3 时间轴4.4轨道工具4.5 节目窗口素材导入 5.基础操作5.1 取消视频音频链接5.2 单独渲染&…

网络监听技术

网络监听技术 网络监听概述网络监听环境 流量劫持网络环境共享式网络监听原理交换式网络监听交换机的工作方式交换网络监听&#xff1a;交换机集线器交换网络监听&#xff1a;端口镜像交换网络监听&#xff1a;MAC洪泛交换网络监听&#xff1a;MAC洪泛交换网络监听&#xff1a;…

OpenMV学习笔记3——画图函数汇总

画图&#xff0c;即在摄像头对应位置画出图形&#xff0c;对于需要反馈信息的程序来说很直观。就如上一篇文章颜色识别当中的例子一样&#xff0c;我们在识别出的色块上画出矩形方框&#xff0c;并在中间标出十字&#xff0c;可以直观的看到OpenMV现在识别出的色块。 目录 一…

《论文阅读》通过顺序不敏感的表示正则化实现稳健的个性化对话生成 ACL 2023

《论文阅读》通过顺序不敏感的表示正则化实现稳健的个性化对话生成 ACL 2023 前言 相关个性化生成论文推荐简介问题定义方法损失函数实验结果 前言 亲身阅读感受分享&#xff0c;细节画图解释&#xff0c;再也不用担心看不懂论文啦~ 无抄袭&#xff0c;无复制&#xff0c;纯手…

Least-Squares Rigid Motion Using SVD——文献精读(使用 SVD 方法求解 ICP 问题)

一、文章信息与摘要 文章标题&#xff1a;Least-Squares Rigid Motion Using SVD&#xff08;使用奇异值分解的最小二乘刚性运动&#xff09; 说明本文的核心目标&#xff1a;计算对齐两组对应点的最佳拟合刚性变换的步骤 二、问题描述 假设P{p1,p2,...,pn}和Q{q1,q2,...,qn…