1. JVM 常用参数
1.1 JVM堆栈相关的参数
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:MaxPermSize=16m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=0
1.2 垃圾收集器相关参数
-XX:+UseParallelGC-XX:ParallelGCThreads=20-XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5-XX:+UseCMSCompactAtFullCollection:
1.3 日志相关的参数
-XX:+PrintGC-XX:+PrintGCDetails
2. JVM 调优基本命令
2.1 jps
JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。
2.2 jinfo
JVM Configuration info 这个命令作用是实时查看和调整虚拟机运行参数
(1) 查看java系统属性
等同于System.getProperties().格式:jinfo -sysprops
(2)查看JVM参数
格式:jinfo -flag [属性name] PID (查看某个进程的属性name的值)
格式: jinfo -flags PID 查询多个属性的值
2.3 jstat
JVM statistics Monitoring是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
格式:jstat -class PID 1000 10 (查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次)
-
Loaded:加载class的数量
-
Bytes:所占用空间大小
-
Unloaded:未加载数量
-
Bytes:未加载占用空间
-
Time:时间
(2) 查看垃圾回收信息
格式:jstat -gc PID 1000 10 (查看某个java进程的gc情况,每1000毫秒输出一次,共输出10次)
S0C :第一个Survivor区的空间
S1C:第二个Survivor区的空间
S0U:第一个Survivor区的使用空间
S1U:第二个Survivor区的使用空间
EC:Eden区的总空间
EU:Eden区的使用空间
OC:Old区的总空间
OU:Old区的已使用空间
MC:元空间的总空间
MU:元空间的使用空间
CCSC:压缩类的总空间
CCSU:压缩类的使用空间
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
2.4 jstack
用于生成java虚拟机当前时刻的线程快照。
2.5 jmap
JVM Memory Map命令用于生成heap dump文件
(1) 统计堆对象
格式:jmap -histo 1796
(2)打印出堆内存相关信息
格式:jmap -heap PID
(3) dump出堆内存相关信息
格式:jmap -dump:format=b,file=heap.hprof PID
2.6 jhat
jhat,JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看
最后
JVM系列主要介绍了JVM核心的基础概念,JVM整体的架构和JVM垃圾收集器和一些JVM监控调优的参数。
下面会根据线上故障介绍一下GC日志如何分析
参考文档
《JVM虚拟机》
《疯狂创客的JVM面试系列》