jvm性能监控常用工具
在java的/bin目录下有许多java自带的工具。

我们常用的有
基础工具
jar:创建和管理jar文件
java:java运行工具,用于运行class文件或jar文件
javac:java的编译器
javadoc:java的API文档生成工具
性能监控和故障处理
jps
jstat
jinfo
jmap
hstack
可视化故障处理工具
JConsole
JHSDB
jps:用于显示当前运行的Java进程的PID
jps命令显示的Java进程ID(PID)就是操作系统中的进程ID(Process ID)。这是每个进程在操作系统中的唯一标识符。jps列出的PID与ps、top等操作系统工具列出的PID是一致的。
常用参数
-l:显示主类的全限定名或JAR文件的完整路径。
jps -l
示例输出:
12345 com.example.MyJavaApp
67890 sun.tools.jps.Jps
-v:显示传递给Java虚拟机的参数。
jps -v
示例输出:
12345 MyJavaApp -Xmx1024m
67890 Jps -Dapplication.home=/usr/lib/jvm/java-14
-m:显示传递给主类的参数。
jps -m
示例输出:
12345 MyJavaApp arg1 arg2
67890 Jps
jstat:虚拟机的类加载信息,内存信息,垃圾回收,运行时编译的统计信息
查看类加载信息
jstat -class 12345
输出示例:
Loaded Bytes Unloaded Bytes Time(ms)1000 5000 50 200 300
查看垃圾回收信息:jstat -gc 12345
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1024.0 1024.0 512.0 0.0 8192.0 4096.0 10240.0 8192.0 5120.0 2048.0 640.0 320.0 5 0.050 2 0.100 0.150
S0C (Survivor 0 Capacity):第一个幸存区的容量,单位是KB。
S1C (Survivor 1 Capacity):第二个幸存区的容量,单位是KB。
S0U (Survivor 0 Utilization):第一个幸存区的已使用空间,单位是KB。
S1U (Survivor 1 Utilization):第二个幸存区的已使用空间,单位是KB。
EC (Eden Capacity):Eden区的容量,单位是KB。
EU (Eden Utilization):Eden区的已使用空间,单位是KB。
OC (Old Capacity):老年代的容量,单位是KB。
OU (Old Utilization):老年代的已使用空间,单位是KB。
MC (Metaspace Capacity):元数据区的容量,单位是KB。
MU (Metaspace Utilization):元数据区的已使用空间,单位是KB。
CCSC (Compressed Class Space Capacity):压缩类空间的容量,单位是KB。
CCSU (Compressed Class Space Utilization):压缩类空间的已使用空间,单位是KB。
YGC (Young Generation GC Count):年轻代垃圾收集的次数。
YGCT (Young Generation GC Time):年轻代垃圾收集的总时间,单位是秒。
FGC (Full GC Count):完全垃圾收集的次数。
FGCT (Full GC Time):完全垃圾收集的总时间,单位是秒。
GCT (Total GC Time):垃圾收集的总时间(年轻代和完全垃圾收集的总和),单位是秒。
每1秒输出一次gc快照,输出5次:jstat -gcutil 30500 1000 5
jstat -gcutil命令的输出以百分比形式显示各个内存区域的利用率(即已使用内存占总内存的比例)

jvm的内存配置情况:jstat -gccapacity 30500
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC512.0 10240.0 8192.0 1024.0 1024.0 6144.0 10240.0 20480.0 10240.0 10240.0 512.0 1024.0 512.0
NGCMN:新生代最小容量。
NGCMX:新生代最大容量。
NGC:当前新生代容量。
S0C、S1C:第一个和第二个幸存区的容量。
EC:Eden区的容量。
OGCMN:老年代最小容量。
OGCMX:老年代最大容量。
OGC:当前老年代容量。
OC:当前老年代容量(通常和OGC相同)。
MCMN:元数据区最小容量。
MCMX:元数据区最大容量。
MC:当前元数据区容量。
jstat -gcold,-gcnew等
jinfo
jvm的常用参数
内存
jvm的最大使用内存,最小使用内存
jvm的新生代的最大最小使用内存
元空间的最大最小使用内存
栈的最大最小内存
性能调优相关参数:
-XX:ParallelGCThreads: 设置并行垃圾收集器的线程数。
-XX:ConcGCThreads: 设置并发垃圾收集器的线程数。
-XX:SurvivorRatio: 设置新生代中Eden区与Survivor区的比例。
-XX:MaxTenuringThreshold: 设置对象在新生代中经过多少次GC后进入老年代。
jinfo -flags:显示所有JVM标志及其值
VM Flags:
-XX:CICompilerCount=12 //设置即时编译器(JIT)线程数为12,用于提升编译性能。
-XX:ConcGCThreads=3 //分层编译最多只进行到级别1,通常意味着只进行简单的编译优化。
-XX:+UseG1GC //启用 G1 垃圾收集器
-XX:G1ConcRefinementThreads=13 //设置 G1 垃圾收集器的并发精炼线程数为13,用于处理记忆集的并发更新
-XX:G1EagerReclaimRemSetThreshold=16 //设置 G1 垃圾收集器在回收记忆集时的早期阈值
-XX:G1HeapRegionSize=2097152 //设置 G1 垃圾收集器堆区域的大小为2MB
-XX:G1RemSetArrayOfCardsEntries=16
-XX:G1RemSetHowlMaxNumBuckets=8
-XX:G1RemSetHowlNumBuckets=8
-XX:GCDrainStackTargetSize=64
-XX:InitialHeapSize=266338304 //堆大小
-XX:+ManagementServer
-XX:MarkStackSize=4194304
-XX:MaxHeapSize=4236247040
-XX:MaxNewSize=2541748224
-XX:MinHeapDeltaBytes=2097152
-XX:MinHeapSize=8388608
-XX:NonProfiledCodeHeapSize=0
-XX:-ProfileInterpreter
-XX:ProfiledCodeHeapSize=0
-XX:SoftMaxHeapSize=4236247040
-XX:TieredStopAtLevel=1
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseFastUnorderedTimeStamps
-XX:-UseLargePagesIndividualAllocation
jinfo -flag MaxHeapSize 30500:查看特定标志的值

jinfo -flag MaxHeapSize=2147483648 12345:修改特点的标志值
jmap:查看jvm内存使用情况
1. 生成堆转储(Heap Dump)
使用 jmap 可以生成 Java 进程的堆转储文件,以便后续分析和诊断内存问题。
jmap -dump:format=b,file=<dump_file_path>
-dump:format=b,file=<dump_file_path>: 指定生成堆转储文件的格式为二进制(b),并指定转储文件的路径。
: Java 进程的进程号(PID)。
例如,要生成一个名为 heapdump.bin 的堆转储文件,可以执行以下命令:
jmap -dump:format=b,file=heapdump.bin
2. 查看堆内存使用情况
可以使用 jmap 查看堆内存的使用情况和统计信息,包括堆的大小、使用量、空闲量等。
jmap -heap
例如:
jmap -heap
3. 查看堆中对象统计信息
jmap 可以输出堆中各个类的实例数量和占用内存等信息。
jmap -histo
例如:
jmap -histo
4. 查看类加载器信息
可以使用 jmap 查看已加载类的详细信息和类加载器的关系。
jmap -clstats
例如:
jmap -clstats
jstack:线程状态,定位线程死锁、查看线程状态、分析线程间的互相等待
查看所有线程
jstack 30500
检测死锁
jstack -l -F
jConsole
JHSDB
相关文章:
jvm性能监控常用工具
在java的/bin目录下有许多java自带的工具。 我们常用的有 基础工具 jar:创建和管理jar文件 java:java运行工具,用于运行class文件或jar文件 javac:java的编译器 javadoc:java的API文档生成工具 性能监控和故障处理 jps jstat…...
ISP IC/FPGA设计-第一部分-SC130GS摄像头分析-IIC通信(1)
1.摄像头模组 SC130GS通过一个引脚(SPI_I2C_MODE)选择使用IIC或SPI配置接口,通过查看摄像头模组的原理图,可知是使用IIC接口; 通过手册可知IIC设备地址通过一个引脚控制,查看摄像头模组的原理图ÿ…...
HTTP协议头中X-Forwarded-For是能做什么?
X-Forwarded-For和相关几个头部的理解 $remote_addr 是nginx与客户端进行TCP连接过程中,获得的客户端真实地址. Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后…...
Linux高并发服务器开发(八)Socket和TCP
文章目录 1 IPV4套接字结构体2 TCP客户端函数 3 TCP服务器流程函数代码粘包 4 三次握手5 四次挥手6 滑动窗口 1 IPV4套接字结构体 2 TCP客户端 特点:出错重传 每次发送数据对方都会回ACK,可靠 tcp是打电话的模型,建立连接 使用连接 关闭连接…...
力扣第220题“存在重复元素 III”
在本篇文章中,我们将详细解读力扣第220题“存在重复元素 III”。通过学习本篇文章,读者将掌握如何使用桶排序和滑动窗口来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释,以便于理解。 问题描述…...
Qt实战项目——贪吃蛇
一、项目介绍 本项目是一个使用Qt框架开发的经典贪吃蛇游戏,旨在通过简单易懂的游戏机制和精美的用户界面,为玩家提供娱乐和编程学习的机会。 游戏展示 二、主要功能 2.1 游戏界面 游戏主要是由三个界面构成,分别是游戏大厅、难度选择和游戏…...
Windows 10,11 Server 2022 Install Docker-Desktop
docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker-compose Compose 是用于定义和运行…...
C++中的RAII(资源获取即初始化)原则
C中的RAII(Resource Acquisition Is Initialization,资源获取即初始化)原则是一种管理资源、避免资源泄漏的惯用法。RAII是C之父Bjarne Stroustrup提出的设计理念,其核心思想是将资源的获取(如动态内存分配、文件句柄、…...
【机器学习】Whisper:开源语音转文本(speech-to-text)大模型实战
目录 一、引言 二、Whisper 模型原理 2.1 模型架构 2.2 语音处理 2.3 文本处理 三、Whisper 模型实战 3.1 环境安装 3.2 模型下载 3.3 模型推理 3.4 完整代码 3.5 模型部署 四、总结 一、引言 上一篇对ChatTTS文本转语音模型原理和实战进行了讲解&a…...
ubuntu22.04 编译安装openssl C++ library
#--------------------------------------------------------------------------- # openssl C library # https://www.openssl.org/source/index.html #--------------------------------------------------------------------------- cd /opt/download # 下载openssl-3.0.13…...
百度Agent初体验(制作步骤+感想)
现在AI Agent很火,最近注册了一个百度Agent体验了一下,并做了个小实验,拿它和零一万物(Yi Large)和文心一言(ERNIE-4.0-8K-latest)阅读了相同的一篇网页资讯,输出资讯摘要࿰…...
7-491 3名同学5门课程成绩,输出最好成绩及所在的行和列(二维数组作为函数的参数)
编程:数组存储3名同学5门课程成绩 输出最好成绩及所在的行和列 要求:将输入、查找和打印的功能编写成函数 并将二维数组通过指针参数传递的方式由主函数传递到子函数中 输入格式: 每行输入一个同学的5门课的成绩,每个成绩之间空一格,见输入…...
OpenCloudOS开源的操作系统
OpenCloudOS 是一款开源的操作系统,致力于提供高性能、稳定和安全的操作系统环境,以满足现代计算和应用程序的需求。它结合了现代操作系统设计的最新技术和实践,为开发者和企业提供了一个强大的平台。本文将详细介绍 OpenCloudOS 的背景、特性…...
排序题目:多数元素 II
文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题:多数元素 II 出处:229. 多数元素 II 难度 3 级 题目描述 …...
<电力行业> - 《第1课:电力行业的五大四小》
1 什么是电力行业的五大四小? 我们常说的电力行业的五大四小,指的是电力行业有实力的公司,分为:较强梯队的五大集团、较弱梯队的四小豪门。 五个实力雄厚的集团,分别是: 中国华能集团公司中国大唐集团公…...
数据库定义语言(DDL)
数据库定义语言(DDL) 一、数据库操作 1、 查询所有的数据库 SHOW DATABASES;效果截图: 2、使用指定的数据库 use 2403 2403javaee;效果截图: 3、创建数据库 CREATE DATABASE 2404javaee;效果截图: 4、删除数据…...
mybatis实现多表查询
mybatis高级查询【掌握】 1、准备工作 【1】包结构 创建java项目,导入jar包和log4j日志配置文件以及连接数据库的配置文件; 【2】导入SQL脚本 运行资料中的sql脚本:mybatis.sql 【3】创建实体来包,导入资料中的pojo 【4】User…...
数据结构:队列详解 c++信息学奥赛基础知识讲解
目录 一、队列概念 二、队列容器 三、队列操作 四、代码实操 五、队列遍历 六、案例实操 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 详细代码: 一、队列概念 队列是一种特殊的线性…...
硬件开发笔记(二十三):贴片电阻的类别、封装介绍,AD21导入贴片电阻原理图封装库3D模型
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140110514 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
Kafka基本原理详解
(一)概念理解 Apache Kafka是一种开源的分布式流处理平台,专为高性能、高吞吐量的实时数据处理而设计。它最初由LinkedIn公司开发,旨在解决其网站活动中产生的大量实时数据处理和传输问题,后来于2011年开源࿰…...
Mac用户的移动Win10工坊:从WTG配置到驱动、激活、文件共享的完整避坑指南
Mac用户的移动Win10工坊:从WTG配置到驱动、激活、文件共享的完整避坑指南 当Mac用户需要运行Windows应用时,双系统方案往往是最佳选择。而通过Windows To Go(WTG)技术将Win10安装在移动硬盘上,不仅保留了Mac原生系统的…...
别再手动调格式了!用C#和FastReport.Net搞定标签批量打印与90度旋转(附完整源码)
C#与FastReport.Net实战:打造高可用的标签批量打印与旋转解决方案 在仓储管理、物流配送和零售价签打印等场景中,开发人员经常需要处理各种规格的标签打印需求。传统的手动调整方式不仅效率低下,而且难以应对频繁变化的业务需求。本文将分享如…...
从电子管到全固态:中波广播发射机核心技术演进与选型指南
1. 中波广播发射机的前世今生 第一次见到中波发射机是在十年前参观某省级广播电台时,那座两层楼高的电子管设备让我印象深刻——嗡嗡作响的风扇、散发着热量的金属外壳、闪烁着微光的电子管,活像科幻电影里的场景。如今这种"大家伙"已经逐渐被…...
cv_unet_image-colorization音乐史料处理:黑白乐谱AI上色与音符语义关联增强
cv_unet_image-colorization音乐史料处理:黑白乐谱AI上色与音符语义关联增强 1. 引言:当黑白乐谱遇见AI色彩 想象一下,你是一位音乐史研究者,面前摊开一本泛黄的、只有黑白线条的19世纪乐谱手稿。那些音符、标记、作曲家的笔迹&…...
3步打造纯净音乐体验:铜钟音乐开源播放器技术解析
3步打造纯净音乐体验:铜钟音乐开源播放器技术解析 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特!(密码重置功能已回归) 项目地址: https://gitcode.com/GitHub_Trending/t…...
React-primitives项目架构剖析:模块化设计与依赖注入原理
React-primitives项目架构剖析:模块化设计与依赖注入原理 【免费下载链接】react-primitives Primitive React Interfaces Across Targets 项目地址: https://gitcode.com/gh_mirrors/re/react-primitives React-primitives是一个跨平台UI开发框架࿰…...
为什么选择Practical Modern JavaScript:探索ES6未来发展方向
为什么选择Practical Modern JavaScript:探索ES6未来发展方向 【免费下载链接】practical-modern-javascript 🏊 Dive into ES6 and the future of JavaScript 项目地址: https://gitcode.com/gh_mirrors/pr/practical-modern-javascript Practic…...
ssm+java2026年毕设数据分析教学网站【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于会议管理问题的研究,现有研究主要以传统OA办公系统或通用协同办公平台为主,专门针对会议全生命周期…...
SP140 ESC遥测驱动库:曼彻斯特编码与单线UART嵌入式解析
1. OpenPPG_SP140_ESC 库深度解析:面向电动动力系统的嵌入式ESC遥测驱动开发指南1.1 项目定位与工程价值OpenPPG_SP140_ESC 是一个专为 SP140 电子调速器(ESC)设计的 Arduino 兼容库,其核心价值不在于通用电机控制,而在…...
西门子博图V16实战:5种工作模式机械手PLC程序全解析(附HMI组态文件)
西门子博图V16实战:5种工作模式机械手PLC程序全解析(附HMI组态文件) 在工业自动化领域,机械手控制系统一直是核心难点之一。如何实现多工作模式的灵活切换、确保信号互锁安全可靠,是每个PLC程序员必须掌握的技能。本文…...
