JVM常用参数
-Xms 初始堆内存大小,默认物理内存64/1
-Xms = -XX:InitialHeapSize
-Xmx 最大堆内存,默认物理内存4/1
-Xmx = -XX:MaxHeapSize
-Xss 栈内存大小, 设置单个线程栈大小,一般默认512~1024kb。
单个线程栈大小跟操作系统和JDK版本都有关系 -Xss = -XX:ThreadStackSize
-Xmn 年轻代大小
-XX:MetaspaceSize 元空间大小,元空间本质跟永久代类似,都是对JVM规范中
方法区的实现。不过元空间与永久代最大的区别在于:元空间并
不在虚拟机中,而是使用本机内存。因此,元空间大小仅受本地
内存限制。
-XX:MaxMetaspaceSize 最大元空间大小。
-XX:+PrintGCDetails 打印GC详细日志信息
-XX:SurvivorRatio 幸存者比例设置
-XX:NewRatio 新生代比例设置
-XX:MaxTenuringThreshold 进入老年代阈值设置
JDK1.8之前前版本设置
-XX:PermSize 持久代(方法区)的初始内存大小。(例如:-XX:PermSize=64m)
-XX:MaxPermSize 持久代(方法区)的最大内存大小。(例如:-XX:MaxPermSize=512m)
JVM参数配置指南
参数配置示例:
-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -Xms256m -Xmx256m
文章看下来上面这段配置的意思很简单,设置元空间的初始值和最大值,设置堆空间的初始值和最大值。
为什么MetaspaceSize要设置为128M?为什么堆内存初始值Xms设置为256M而不是512M?
按照Java官方的指导
- Java堆大小设置,Xms 和 Xmx设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍
- MaxPermSize(元空间)设置为老年代存活对象的1.2-1.5倍。
- 年轻代Xmn的设置为老年代存活对象的1-1.5倍。
- 老年代的内存大小设置为老年代存活对象的2-3倍。
可以让系统运行一段时间后查看系统的各个指标,然后在进行配置。如下用jstat工具查看jvm的情况
jstat -gc javapid
###
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
13824.0 22528.0 13377.0 0.0 548864.0 535257.2 113152.0 46189.3 73984.0 71119.8 9728.0 9196.2 14 0.259 3 0.287 0.546
OU表示老年代所占用的内存为 46189.3 K(大约45M);那么jvm相应的配置参数应该做如下修改
-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M -Xms180m -Xmx180m