jvm工具-jps、jstat、jmap、jstack

一、jps

jps -v 【输出进程启动参数

复制代码
[root@VM-8-2-centos ~]# jps -v
12401 Jps -Dapplication.home=/usr/local/jdk1.8.0_241 -Xms8m
16964 jar

其他参考

Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客

二、jstat

jstat -gc 【vmid】 【查看Java堆的状态】

复制代码
[root@VM-8-2-centos dian-xhf]# jstat -gc 16964
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
12288.0 8192.0  0.0    0.0   147968.0 26136.3   55808.0    25116.2   59136.0 56068.7 7680.0 7058.2     15    0.223   3      0.341    0.564

jstat -gcutil 【vmid】 【查看Java堆占用百分比】

复制代码
[root@VM-8-2-centos dian-xhf]# jstat -gcutil 16964
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00  17.66  45.00  94.81  91.90     15    0.223     3    0.341    0.564

S0 幸存0区域

S1 幸存1区域

E 伊甸园区

O 老年区

M 元空间 【有可能是P,表示永久代。具体的和jdk版本有关,笔者jdk版本是8】

YGC 年轻代的GC,也就是Minor GC ,轻量GC ,次数15

YGCT 轻量GC所耗时间 0.223秒

FGC 重量级GC次数 3

FGCT 重量级GC所耗时间 0.341秒

GCT 所有GC所耗费时间 0.564秒

三、jmap

jmap -heap pid

打印 Java 堆概要信息,包括使用的 GC 算法、堆配置参数和各代中堆内存使用情况;

复制代码
> jmap -heap 10352

jmap -heap 10352
Attaching to process ID 10352, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(defalut 40)
   MinHeapFreeRatio         = 0 
   //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
   MaxHeapFreeRatio         = 100
   //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
   MaxHeapSize              = 4280287232 (4082.0MB)
   //对应jvm启动参数-XX:NewSize=设置JVM堆的'新生代'的默认大小
   NewSize                  = 89128960 (85.0MB)
   //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的'新生代'的最大大小
   MaxNewSize               = 1426587648 (1360.5MB)
   //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的'老年代'的大小
   OldSize                  = 179306496 (171.0MB)
   //对应jvm启动参数-XX:NewRatio=:'新生代'和'老生代'的大小比率
   NewRatio                 = 2
   //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
   SurvivorRatio            = 8
   //对应jvm启动参数-XX:MetaspaceSize=<value>:设置JVM堆的'元空间'的初始大小
   // jdk1.8 永久代已经被元空间所取代
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   //对应jvm启动参数-XX:MaxMetaspaceSize= :设置JVM堆的'元空间'的最大大小
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)
//堆内存分布
Heap Usage:
//新生代的内存分布
PS Young Generation
//Eden区内存分布
Eden Space:
   //Eden区总容量
   capacity = 1425539072 (1359.5MB)
   //Eden区已使用
   used     = 28510792 (27.19001007080078MB)
   //Eden区剩余容量
   free     = 1397028280 (1332.3099899291992MB)
   //Eden区使用比率
   2.0000007407724003% used
From Space:
   capacity = 524288 (0.5MB)
   used     = 65536 (0.0625MB)
   free     = 458752 (0.4375MB)
   12.5% used
To Space:
   capacity = 524288 (0.5MB)
   used     = 0 (0.0MB)
   free     = 524288 (0.5MB)
   0.0% used
PS Old Generation
   capacity = 128974848 (123.0MB)
   used     = 24006808 (22.894676208496094MB)
   free     = 104968040 (100.1053237915039MB)
   18.613557893086256% used

13410 interned Strings occupying 1194568 bytes.

jmap -histo pid

打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;

复制代码
>jmap -histo 10352

 num     #instances         #bytes  class name
----------------------------------------------
   1:      27073797      433180752  java.lang.Integer
   2:          5442       16503144  [I
   3:          5005        6143944  [B
   4:         33835        3446608  [C
   5:          9721         855448  java.lang.reflect.Method
   6:         33751         810024  java.lang.String
   7:          6494         717416  java.lang.Class
   8:         14303         457696  java.util.concurrent.ConcurrentHashMap$Node
   ...

jmap -histo:live pid

打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;统计 heap 中所有生存的对象的情况, 这个命令会先触发 gc 再统计:

复制代码
> jmap -histo:live 10352

 num     #instances         #bytes  class name
----------------------------------------------
   1:         27483        2670608  [C
   2:          6453         713152  java.lang.Class
   3:         27300         655200  java.lang.String
   4:         12861         411552  java.util.concurrent.ConcurrentHashMap$Node
   5:          6364         327688  [Ljava.lang.Object;
   6:          2496         219648  java.lang.reflect.Method
   7:           874         178440  [B
   ...

jmap -dump:live,format=b,file=a.log pid

以 hprof 二进制格式将 Java 堆信息输出到文件内,该文件可以用 JProfiler、VisualVM 或 jhat 等工具查看;

JDK 常用工具 ------ jmap 详解-CSDN博客

四、jstack

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。

Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客

分析工具jprofiler

相关推荐
我不想当小卡拉米12 小时前
C++:继承+菱形虚拟继承的一箭双雕
开发语言·jvm·c++
时光呢12 小时前
JAVA常见的 JVM 参数及其典型默认值
java·开发语言·jvm
我命由我1234518 小时前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
xyliiiiiL1 天前
ZGC初步了解
java·jvm·算法
心灵Haven1 天前
JVM介绍
jvm
小样vvv1 天前
【面试篇】JVM
jvm·面试·职场和发展
兢兢业业的小白鼠1 天前
Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器
java·开发语言·jvm·tomcat
程序猿chen1 天前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
Song1 天前
JVM 学习计划表(2025 版)
jvm·学习
皮卡兔子屋2 天前
java虚拟机---JVM
java·jvm