jvm 调优命令- jmap\jstask\jsinfo\jstat

jps - 查看实例
Jmap -histo <pid> #查看历史生成的实例
Jmap -histo:live <pid> #查看当前存活实例,执行过程中可能触发Full GC
Jmap -heap <pid> #堆信息
Jmap -dump:format=b,file=eureka.hprof <pid> #生成堆内存信息文件
也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
 
-XX:+HeapDumpOnOutOfMemoryError
 
-XX:HeapDumpPath=./   (路径)
Jstack <pid> | grep -A 10 xxxx #查找线程死锁, 也可以用 jvisualvm 自动监测死锁, xxxx 为cpu 飙高的线程id 16进制表示
Jinfo -flags <pid> #查看jvm 参数
Jinfo -sysprops <pid> #查看Java 系统参数
Jstat -gc <pid> #最常用,评估程序内使用及GC压力整体情况
Jstat -gccapacity <pid> #堆内存统计
Jstat -gcnew <pid> #新生代垃圾回收统计
Jstat -gcnewcapacity <pid> #新生代内存统计
Jstat -gcold <pid> #老年代垃圾回收统计
Jstat -gcoldcapacity <pid> #老年代内存统计
Jstat -gcmetacapacity <pid> #元数据空间内存统计
Jstat -gcutil <pid> #总结垃圾回收统计
 
Jmap - heap <pid>  #堆信息查看示例

[root@localhost ~]# jmap -heap 929 Attaching to process ID 929, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.181-b13 using thread-local object allocation. Parallel GC with 13 thread(s) Heap Configuration:    #堆的配置 MinHeapFreeRatio = 0                #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率 MaxHeapFreeRatio = 100               #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率 MaxHeapSize = 16789798912 (16012.0MB)   #-XX:MaxHeapSize=设置JVM堆的最大大小 NewSize = 350224384 (334.0MB)      #-XX:NewSize=设置JVM堆的‘新生代’的默认大小 MaxNewSize = 5596250112 (5337.0MB)    #-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小 OldSize = 700448768 (668.0MB)      #-XX:OldSize=设置JVM堆的‘老年代’的大小 NewRatio = 2                #-XX:NewRatio=:‘新生代’和‘老年代’的大小比率 SurvivorRatio = 8                #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值 MetaspaceSize = 21807104 (20.796875MB)    #jdk8中tomcat修改配置PermSize为MetaspaceSize,Metaspace扩容时触发FullGC的初始化阈值,
                                    也是最小的阈值
CompressedClassSpaceSize
= 1073741824 (1024.0MB)    #maximum size of class area in Metaspace when compressed class poniters are use
   MaxMetaspaceSize         = 17592186044415 MB       # Metaspac的最大大小
   G1HeapRegionSize         = 0 (0.0MB)            # size of the G1 regions

Heap Usage:      #堆的使用
PS Young Generation
Eden Space:      #Eden 的区域分布
   capacity = 1056440320 (1007.5MB)          #容量
   used     = 8253592 (7.871238708496094MB)      #已经使用的大小
   free     = 1048186728 (999.6287612915039MB)    # 剩余容量
   0.7812643879400589% used      #使用比例
From Space:      #其中一个 survivor 区的内存分布
   capacity = 37224448 (35.5MB)    #容量
   used     = 0 (0.0MB)          #已使用
   free     = 37224448 (35.5MB)    #剩余容量
   0.0% used
To Space:        # 另外一个 survivor 区的内存分布
   capacity = 41943040 (40.0MB)
   used     = 0 (0.0MB)
   free     = 41943040 (40.0MB)
   0.0% used
PS Old Generation      # 当前Old 区的内存分布
   capacity = 1119879168 (1068.0MB)
   used     = 93440376 (89.11168670654297MB)
   free     = 1026438792 (978.888313293457MB)
   8.343790890125746% used

42456 interned Strings occupying 4367720 bytes.

 

# jinfo -flags 929   JVM 参数


[root@localhost projectbak]# jinfo -flags 929
Attaching to process ID 929, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
Non-default VM flags: -XX:CICompilerCount=12 -XX:InitialHeapSize=1050673152 -XX:MaxHeapSize=16789798912 -XX:MaxNewSize=5596250112 
-XX:MinHeapDeltaBytes=524288 -XX:NewSize=350224384 -XX:OldSize=700448768 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
-XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC Command line:
#jinfo -sysprops 929  查看 java 系统参数

[root@localhost projectbak]# jinfo -sysprops 929
Attaching to process ID 929, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.181-b13
sun.boot.library.path = /usr/java/jdk1.8.0_201/jre/lib/amd64
java.protocol.handler.pkgs = org.springframework.boot.loader
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = US
user.dir = /project/hcp-vitpa
java.vm.specification.name = Java Virtual Machine Specification
PID = 929
java.runtime.version = 1.8.0_181-b13
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /usr/java/jdk1.8.0_201/jre/lib/endorsed
line.separator = 

java.io.tmpdir = /tmp
java.vm.specification.vendor = Oracle Corporation
os.name = Linux
sun.jnu.encoding = UTF-8
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
spring.beaninfo.ignore = true
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 3.10.0-1160.el7.x86_64
LOG_FILE = log/spring.log
user.home = /root
user.timezone = Asia/Shanghai
catalina.useNaming = false
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
catalina.home = /tmp/tomcat.4950038553861836551.10032
user.name = root
java.class.path = hcp-vitpa-0.0.1-SNAPSHOT.jar
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = hcp-vitpa-0.0.1-SNAPSHOT.jar --spring.profiles.active=bj
java.home = /usr/java/jdk1.8.0_201/jre
user.language = en
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.awt.X11.XToolkit
java.vm.info = mixed mode
java.version = 1.8.0_181
java.ext.dirs = /usr/java/jdk1.8.0_201/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /usr/java/jdk1.8.0_201/jre/lib/resources.jar:/usr/java/jdk1.8.0_201/jre/lib/rt.jar:/usr/java/jdk1.8.0_201/jre/lib/sunrsasign.jar:/usr/java/jdk1.8.0_201/jre/lib/jsse.jar:/usr/java/jdk1.8.0_201/jre/lib/jce.jar:/usr/java/jdk1.8.0_201/jre/lib/charsets.jar:/usr/java/jdk1.8.0_201/jre/lib/jfr.jar:/usr/java/jdk1.8.0_201/jre/classes
java.awt.headless = true
java.vendor = Oracle Corporation
catalina.base = /tmp/tomcat.4950038553861836551.10032
file.separator = /
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
LOG_PATH = log
sun.cpu.isalist = 

 

#jstat -gc <pid> 查看评估程序内使用及GC压力整体情况

[root@localhost projectbak]# jstat -gc 929
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 40960.0 36352.0 0.0 0.0 1031680.0 68654.6 1093632.0 91250.4 86912.0 83147.7 10112.0 9404.8 11 0.186 4 0.468 0.654

前8项为各个区域(S-幸存者区, E-伊甸园区, O-老年代区)的空间和使用量。
MC: 方法区大小
MU: 方法区使用大小
CCSC: 压缩类空间大小
CCSU: 压缩类空间使用大小
YGC: young gc 的次数
YCGT: young gc 的时间
FGC: full gc 的次数
FGCT: full gc 的时间
GCT: gc 总时间

 

# jstat -gccapacity <pid> 堆内存统计

[root@localhost projectbak]# jstat -gccapacity 929 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 342016.0 5465088.0 1268736.0 40960.0 36352.0 1031680.0 684032.0 10931200.0 1093632.0 1093632.0 0.0 1126400.0 86912.0 0.0 1048576.0 10112.0 11 4

NGGMN: 新生代最小容量
NGCMX: 新生代最大容量
NGC: 当前新生代容量
S0C: 第一个幸存区大小
S1C: 第二个幸存区大小
EC: 伊甸园区的大小
OGCMN: 老年代最小容量
OGCMX: 老年代最大容量
OGC: 当前老年代大小
OC: 当前老年代大小
MCMN: 最小元数据容量
MCMX: 最大元数据容量
CCSMN: 最小压缩类空间大小
CCSMX: 最大压缩类空间大小
CCSC: 当前压缩类空间大小
YGC: 年轻代 GC 次数
FGC: 老年代 GC 次数

 

# jstat -gcnew <pid> 新生代垃圾回收统计

[root@localhost projectbak]# jstat -gcnew 929 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 40960.0 36352.0 0.0 0.0 7 15 40960.0 1031680.0 649841.1 11 0.186

TT: 对象在新生代存活的次数
MTT: 对象在新生代存活的最大次数
DSS: 期望的幸存区大小

 

#jstat -gcnewcapacity <pid> 新生代内存统计

[root@localhost projectbak]# jstat -gcnewcapacity 929 NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 342016.0 5465088.0 1268736.0 1821696.0 40960.0 1821696.0 36352.0 5464064.0 1031680.0 11 4
NGGMN: 新生代最小容量
NGCMX: 新生代最大容量
NGC: 当前新生代容量
S0CMX: 最大幸存1区大小

S0C: 第一个幸存区大小
S1CMX: 最大幸存2区大小

S1C: 第二个幸存区大小
ECMX: 最大伊甸园区大小

EC: 伊甸园区的大小

 

#jstat -gcold <pid> 老年代垃圾回收统计

[root@localhost projectbak]# jstat -gcold 929 MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 86912.0 83147.7 10112.0 9404.8 1093632.0 91250.4 11 4 0.468 0.654
MC: 方法区大小
MU: 方法区使用大小
CCSC: 压缩类空间大小
CCSU: 压缩类空间使用大小
OC: 老年代大小
OU: 老年代使用大小
YGC: 年轻代垃圾回收次数
FGC: 老年代垃圾回收次数
FGCT: 老年代垃圾回收消耗时间
GCT: 垃圾回收消耗总时间

 

#jstat -gcoldcapacity <pid> 老年代内存统计

[root@localhost projectbak]# jstat -gcoldcapacity 929 OGCMN OGCMX OGC OC YGC FGC FGCT GCT 684032.0 10931200.0 1093632.0 1093632.0 11 4 0.468 0.654

 

# jstat -gcmetacapacity <pid> 元数据空间统计

[root@localhost projectbak]# jstat -gcmetacapacity 929 MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT 0.0 1126400.0 86912.0 0.0 1048576.0 10112.0 11 4 0.468 0.654

 

# jstat -gcutil <pid> 总结垃圾回收统计

[root@localhost projectbak]# jstat -gcutil 929 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 0.00 67.16 8.34 95.67 93.01 11 0.186 4 0.468 0.654
S0: 幸存者1区当前使用比例
S1: 幸存者2区当前使用比例
E: 伊甸园区使用比例
O:老年代使用比例
M: 元数据区使用比例
CCS: 压缩使用比例
YGC: 年轻代回收次数
FGC: 老年代回收次数
FGCT: 老年代回收消耗时间
GCT: 垃圾回收消耗总时间

 

posted @ 2022-08-08 11:26  长弓射大狗  阅读(129)  评论(0编辑  收藏  举报