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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 实现 AOP 动态热插拔功能并附DEMO源码

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来&#xff1a;深入了解机器学习的核心技术与实际应用 &#x1f48e;1.引言&#x1f48e;1.1 什么是机器学习&#xff1f; &#x1f48e;2 机器学习的分类&#x1f48e;3 常用的机器学习算法&#x1f48e;3.1 线性回归&#xff08;Linear Regression&#xff09;&#x1…

基础算法模板

1. 相向双指针 class Solution { // 两数之和public int[] twoSum(int[] numbers, int target) {int left 0; // 第一步初始化开头和结尾两个指针int right numbers.length - 1;while (true) { // 之后一直while循环 int s numbers[left] numbers[right]; //计算左右两个…

Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理

导言 填鸭似的教育确实不行&#xff0c;我高中时学过集合&#xff0c;不知道有什么用&#xff0c;毫无兴趣&#xff0c;等到我学了一门编程语言后&#xff0c;才发现集合真的很有用&#xff1b;可以去重&#xff0c;可以看你有我没有的&#xff0c;可以看我有你没有的&#xf…

mybatis实现多表查询

mybatis高级查询【掌握】 1、准备工作 【1】包结构 创建java项目&#xff0c;导入jar包和log4j日志配置文件以及连接数据库的配置文件&#xff1b; 【2】导入SQL脚本 运行资料中的sql脚本&#xff1a;mybatis.sql 【3】创建实体来包&#xff0c;导入资料中的pojo 【4】User…

Swift宏的实现

上篇介绍了Swift宏的定义与生声明&#xff0c;本篇主要看看是Swift宏的具体实现。结合Swift中Codable协议&#xff0c;封装一个工具让类或者结构体自动实现Codable协议&#xff0c;并且添加一些协议中没有的功能。 关于Codable协议 Codable很好&#xff0c;但是有一些缺陷&…

141个图表,完美展示数据分类别关系!

本文介绍使用Python工具seaborn详细实现分类关系图表&#xff0c;包含8类图141个代码模版。 分类关系图表用于展示数字变量和一个或多个分类变量之间的关系&#xff0c;可以进一步分为&#xff1a;箱形图&#xff08;box plot&#xff09;、增强箱形图&#xff08;enhanced bo…

DP:子数组问题

文章目录 引言子数组问题介绍动态规划的基本概念具体问题的解决方法动态规划解法&#xff1a;关于子数组问题的几个题1.最大子数组和2.环形子数组的最大和3.乘积最大子数组4.乘积为正数的最长子数组长度5.等差数列划分 总结 引言 介绍动态规划&#xff08;DP&#xff09;在解决…

Deep-LIBRA:一种用于可靠量化乳腺密度的人工智能方法,并在乳腺癌风险评估中进行了独立验证| 文献速递-深度学习自动化疾病检查

Title 题目 Deep-LIBRA: An artificial-intelligence method for robust quantification of breast density with independent validation in breast cancer risk assessment Deep-LIBRA&#xff1a;一种用于可靠量化乳腺密度的人工智能方法&#xff0c;并在乳腺癌风险评估中…

【内网渗透】从0到1的内网渗透基础概念笔记

目录 域 域的介绍 单域 父域和子域 域树 域森林 域名服务器 活动目录 活动目录介绍 域内权限 组 域本地组 全局组 通用组 总结 示例 A-G-DL-P策略 重要的域本地组 重要的全局组、通用组 安全域划分 域 域的介绍 Windows域是计算机网络的一种形式&#xf…

【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战

目录 一、引言 二、FFmpeg工具介绍 2.1 什么是FFmpeg 2.2 FFmpeg核心原理 2.3 FFmpeg使用示例 三、FFmpegWhisper二阶段法视频理解实战 3.1 FFmpeg安装 3.2 Whisper模型下载 3.3 FFmpeg抽取视频的音频 3.3.1 方案一&#xff1a;命令行方式使用ffmpeg 3.3.2 方案二&a…

[论文精读]Variational Graph Auto-Encoders

论文网址&#xff1a;[1611.07308] Variational Graph Auto-Encoders (arxiv.org) 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎…

Android 界面库 (二) 之 Data binding 详细介绍

1. 简介 回顾我们在前面文章《Android 界面库 (一) 之 View binding 简单使用》中学习的 View Binding&#xff0c;它旨在简化 View 与代码之间的绑定过程。它会在编译时期为每个 XML 布局文件生成相应的绑定类(Binding class)&#xff0c;该类里包含了布局文件每个有 ID 的 Vi…

基于SpringBoot扶农助农政策管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

利用 Docker 简化 Nacos 部署:快速搭建 Nacos 服务

利用 Docker 简化 Nacos 部署&#xff1a;快速搭建 Nacos 服务 引言 在微服务架构中&#xff0c;服务注册与发现是确保服务间通信顺畅的关键组件。Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;作为阿里巴巴开源的一个服务发现和配置管理平台&…

【单片机毕业设计选题24039】-基于单片机的太阳能储能智能恒温外卖柜设计

系统功能: 以单片机为控制核心&#xff0c;综合运用传感器、物联网、太阳能等技术&#xff0c;设计一种基于单片机为控制核心的智能恒温外卖柜。它由恒温系统、无线模块、智能提醒系统、供电系统等组成&#xff0c;通过太阳能电池板独立供电&#xff0c;利用太阳能储能元件驱动…

Linux网络编程:套接字编程

1.Socket套接字编程 1.1.什么是socket套接字编程 Socket套接字编程 是一种基于网络层和传输层网络通信方式&#xff0c;它允许不同主机上的应用程序之间进行双向的数据通信。Socket是网络通信的基本构件&#xff0c;它提供了不同主机间的进程间通信端点的抽象。一个Socket就是…

免费开源的后端API服务-supabase安装和使用-简直是前端学习者福音

文章目录 它是什么安装和部署关于安装关于部署1、注册用户2、创建组织3、创建项目 创建数据库表&#xff08;填充内容&#xff09;填充数据库表 使用postman联调API 它是什么 一个开源免费的后端框架&#xff0c;firebase的替代品。可以简单理解类似于headless cms&#xff0c…

浅谈定时器之泊松随机定时器

浅谈定时器之泊松随机定时器 “泊松随机定时器”(Poisson Random Timer)&#xff0c;它允许你基于泊松分布来随机化请求之间的延迟时间&#xff0c;这对于模拟具有随机到达率的事件特别有用&#xff0c;如用户访问网站或服务的请求。 泊松分布简介 泊松分布是一种统计与概率…

HarmonyOS开发探索:父子组件手势绑定问题处理

场景一&#xff1a;父子组件同时绑定手势的冲突处理 效果图 方案 在默认情况下&#xff0c;手势事件为非冒泡事件&#xff0c;当父子组件绑定相同的手势时&#xff0c;父子组件绑定的手势事件会发生竞争&#xff0c;最多只有一个组件的手势事件能够获得响应&#xff0c;默认子…