posts

JVM参数说明

梳理常用 JVM 启动参数:堆大小、GC 策略、日志输出、内存溢出转储等配置项。

-Xms30720m -Xmx30720m -XX:MaxDirectMemorySize=1024m -XX:+PrintGC -XX:+PrintGCDateStamps -Xloggc:/home/admin/edas_logs/logs -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/edas_logs/logs -XX:+UseG1GC -XX:PermSize=512m -XX:MaxPermSize=512m -Xmn5G -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy  -Dspring.cloud.alicloud.acm.group=hsa-mbs-local-prd -Dspring.application.name=hsa-mbs-local      


-XX:+UseG1GC -XX:PermSize=512m -XX:MaxPermSize=512m -Xmn5G -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy  -Dspring.cloud.alicloud.acm.group=hsa-mbs-local-prd -Dspring.application.name=hsa-mbs-local     
JAVA_HOME="/home/admin/jdk1.8.0_261"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Xms4096m -Xmx4096m -Xmn2g - XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC - XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly"
JAVA_HOME="/home/admin/jdk1.8.0_261"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Xmsm8192m -Xmx8192m -Xmn4g -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly"

参数说明

1.JVM(Java Virtual Machine)

1.-Xms 初始堆大小

2.-Xmx 最大堆大小

3.-Xmn 青年代大小

4.-Xss 每个线程的堆栈大小

5.-XX:+UseParNewGC 青年代垃圾收集方式为并行收集

6.-XX:+UseParallelOldGC 老年代垃圾收集方式为并行收集

7.-XX:ParallelGCThreads 并行收集器的线程数(最好与处理器数目相等)

8.-XX:MaxGCPauseMillis 每次青年代垃圾回收的最长时间(最大暂停时间)

9.-XX:+UseAdaptiveSizePolicy 自动选择青年代区大小和相应的Survivor区比例

10.-XX:GCTimeRatio 设置垃圾回收时间占程序运行时间的百分比

11.-XX:+ScavengeBeforeFullGC Full GC前调用YGC

21.-XX:NewSize 青年代大小(for 1.3/1.4)

22.-XX:MaxNewSize 青年代最大值(for 1.3/1.4)

23.-XX:PermSize 设置持久代(perm gen)初始值

24.-XX:MaxPermSize 持久代最大值

2.CMS(Concurrent Mark-Sweep)

以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。

1.-XX:+UseConcMarkSweepGC 使用CMS内存收集

2.-XX:CMSFullGCsBeforeCompaction 多少次后进行内存压缩

3.-XX:+CMSParallelRemarkEnabled 降低标记停顿

4.-XX+UseCMSCompactAtFullCollection 在FULL GC的时候, 对年老代的压缩

5.-XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集

6.-XX:CMSInitiatingOccupancyFraction=70 使用cms作为垃圾回收,使用70%后开始CMS收集

7.-XX:CMSInitiatingPermOccupancyFraction 设置Perm Gen使用到达多少比率时触发

8.-XX:+CMSIncrementalMode 设置为增量模式

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64

JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4

默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。

因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

非堆内存分配:

JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;

由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

-Xmn2G:设置年轻代大小为2G。

-XX:SurvivorRatio,设置年轻代中Eden区与Survivor区的比值。