[JVM] JVM 参数调优
前言
本文主要介绍JVM各个参数的总结。
前置
- 查看默认参数
java +XX:+PrintCommandLineFlags -version
- 查看某个进程的参数
jinfo -flags <pid>
通用
JVM参数类型
JVM 参数主要包括如下几种类型:
- 标准 - : 所有的HotSpot版本都支持
- 非标准 -X : 特定的HotSpot版本支持.
- 不稳定 -XX : 下版本可能废弃.
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
JVM参数获取
- java -XX:+PrintFlagsInitial 默认参数值
- java -XX:+PrintFlagsFinal 最终参数值
- java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数 / java -XX:+PrintFlagsFinal -version |grep GC
其余常用参数
- -Xmn -Xms -Xmx -Xss
年轻代 最小堆 最大堆 栈空间 - -XX:NewSize=300M -XX:MaxNewSize=350M -XX:OldSize=100M -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=150M (老年代/年轻代/元数据区大小)
垃圾回收器选择
-XX:+UseSerialGC = Serial New (DefNew) + Serial Old
- 小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
-XX:+UseParNewGC = ParNew + SerialOld
- 这个组合已经很少用(在某些版本中已经废弃
[https://stackoverflow.com/questions/34962257/why-remove-support-for-parnewserialold-anddefnewcms-in-the-future\]
- 这个组合已经很少用(在某些版本中已经废弃
- -XX:+UseConMarkSweepGC = ParNew + CMS + Serial Old
- -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) (PS+PO)
- -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
- -XX:+UseG1GC = G1
Linux中没找到默认GC的查看方法,而windows中会打印UseParallelGC
- java +XX:+PrintCommandLineFlags -version
- 通过GC的日志来分辨
垃圾回收器级别
- Serial 几十兆
- PS 上百兆 - 几个G
- CMS - 20G
- G1 - 上百G
- ZGC - 4T - 16T(JDK13)
Parallel Scavage + Parallel Old (PS+PO)
- -XX:SurvivorRatio
- -XX:PreTenureSizeThreshold 大对象大小
- -XX:+ParallelGCThreads
并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同 - -XX:+UseAdaptiveSizePolicy
自动选择各区大小比例
Garbage First (G1)
- -XX:+UseG1GC
- G1NewSizePercent
新生代最小比例,默认为5% - G1MaxNewSizePercent
新生代最大比例,默认为60% - ConcGCThreads
线程数量
CMS
使用少. 略.
ZGC
暂没接触. 略.
实战相关
PS+PO
-Xms800m -Xmx800m -Xmn800M -XX:NewSize=300M -XX:MaxNewSize=350M -XX:OldSize=100M -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=150M
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/sean/jvm_dump/1 -verbose:gc -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC -Xloggc:gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintReferenceGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=falseG1
-Xms800m -Xmx800m -Xmn800M -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=150M
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/sean/jvm_dump/1 -verbose:gc -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintReferenceGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:+UseG1GC
还没有评论,来说两句吧...