JVM虚拟机常用参数:
在虚拟机中输入java就可以启动一个java虚拟机,以横杠开头的都是标准参数;以-X开头的都是非标准参数,当在系统中输入 java -X的时候,系统会把所有的非标准参数都列举出来;一般真正用来调优的参数是以-XX开头的
标准参数:
非标准参数:
真正调优的时候用到的参数
GC常用参数
-
-Xmn -Xms -Xmx -Xss
年轻代 最小堆 最大堆 栈空间
-
-XX:+UseTLAB
使用TLAB, 默认打开
-
-XX:+PrintTLAB
打印TLAB的使用情况
-
-XX:+TLABSize
设置TLAB大小
-
-XX:+DisableExplictGC
System.gc()不管用,FGC
-
-XX:+PrintGC
-
-XX:+PrintGCDetails
-
-XX:+PrintHeapAtGC
-
-XX:+PrintGCTimeStamps
-
-XX:+PrintGCApplicationConcurrentTime
打印应用程序时间
-
-XX:+PrintGCApplicationStoppedTime
打印暂停时长
-
-XX:+PrintReferenceGC
记录回收了多少种不同引用类型的引用
-
-XX:+PrintGCApplicationStoppedTime
打印暂停时长
-
-XX:+PrintReferenceGC
记录回收了多少种不同引用类型的引用
-
-verbose:class
类加载详细过程
-
-XX:+PrintVMOptions
-
-XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
特别常用的参数(必须会用)
-
-XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
特别常用的参数(必须会用)
-
-Xloggc:opt/log/gc.log
-
-XX:MaxTenuringThreshold
升代年龄,最大值15
-
锁自旋次数 -XX:PreBlockSpin 热点代码检测参数 -XX:CompileThreshold 逃逸分析 标量替换
-
-XX:+HeapDumpOnOutOfMemoryError
什么时候出现OOM了,JVM就什么时候自动转出堆信息文件jmap生成的那个
Parallel常用参数
- -XX:SurvivorRatio
- -XX:PreTenureSizeThreshold
大对象到底多大 - -XX:MaxTenuringThreshold
- -XX:+ParallelGCThreads
并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同 - -XX:+UseAdaptiveSizePolicy
自动选择各区大小比例
CMS常用参数
- -XX:+UseConcMarkSweepGC
- -XX:ParallelCMSThreads
CMS线程数量 - -XX:CMSInitiatingOccupancyFraction
使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld卡顿,应该调小,(频繁CMS回收) - -XX:+UseCMSCompactAtFullCollection
在FGC时进行压缩 - -XX:CMSFullGCsBeforeCompaction
多少次FGC之后进行压缩 - -XX:+CMSClassUnloadingEnabled
- -XX:CMSInitiatingPermOccupancyFraction
达到什么比例时进行Perm回收 - GCTimeRatio
设置GC时间占用程序运行时间的百分比 - -XX:MaxGCPauseMillis
停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代
G1常用参数
- -XX:+UseG1GC
- -XX:MaxGCPauseMillis
建议值,G1会尝试调整Young区的块数来达到这个值 - -XX:GCPauseIntervalMillis
?GC的间隔时间 - -XX:+G1HeapRegionSize
分区大小,建议逐渐增大该值,1 2 4 8 16 32。
随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长
ZGC做了改进(动态区块大小) - G1NewSizePercent
新生代最小比例,默认为5% - G1MaxNewSizePercent
新生代最大比例,默认为60% - GCTimeRatio
GC时间建议比例,G1会根据这个值调整堆空间 - ConcGCThreads
线程数量 - InitiatingHeapOccupancyPercent
启动G1的堆空间占用比例
常用的一些命令:
jps 列出java的所有进程
jinfo [进程号] 显示出java进程的详细信息
jstat -gc [进程号] java程序的统计信息
jstack [进程号] 将java程序的线程详细信息打印出来
top 查看进程占用的cpu资源
top -Hp [进程号] 查看某个进程中的线程所占用的cpu资源
jmap -histo 11988
第一个作用:会对当前正在运行的java程序里面对象的数量,占了多少字节
第二个作用:产生一个堆内存的文件,以供分析
jmap -dump:format=b,file=20230219.txt 11988
GC垃圾回收机制的参数:
S0C:第一个Survivor区的空间
S1C:第二个Survivor区的空间
S0U:第一个Survivor区的使用空间
S1U:第二个Survivor区的使用空间
EC:Eden区的总空间
EU:Eden区的使用空间
OC:Old区的总空间
OU:Old区的已使用空间
MC:元空间的总空间
CCSC:压缩类的总空间
CCSU:压缩类的使用空间
YGC:年轻代垃圾回收次数
TGCT:年轻垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
堆内存的统计
NGCMN:新生代最小空间
NGCMX:新生代最大空间
NGC:当前新生代空间
S0C:第一个Survivor区空间
S1C:第二个Survivor区空间
EC:Eden区的总空间
OGCMN:老年代最小空间
OGCMX:老年代最大空间
OGC:当前老年代空间
OC:当前老年代空间
MCMN:最小元空间大小
MCMX:最大元空间大小