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      MC
  512.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

  • 27
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值