JDK1.8的版本
机器配置:
JVM参数设置
JAVA_OPTS='-server -Xmn1g -Xms9g -Xmx9g -Xss512K -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/timerbackend_gc.hprof -XX:+ParallelRefProcEnabled -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g'
设置之后,GC的回收情况
参数详解:
-server: 选择使用 Java HotSpot Server VM3。特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境。在具有 64 位能力的 jdk 环境下将默认启用该模式,而忽略-server 参数。
-Xmn: 设置年轻代的初始和最大大小。建议将年轻代的规模保持在整体堆大小的一半到四分之一之间.
-Xms: 指定 jvm 堆的初始大小,默认为物理内存的 1/64,最小为 1M;可以指定单位,比如 k、m,若不指定,则默认为字节。如果未设置此选项,则初始大小将设置为为老年代和年轻代分的大小之和。可以使用选项 -Xmn-XX:NewSize 设置年轻代的堆的初始大小。注意,-Xms-XX:InitalHeapSize 选项还可用于设置初始堆大小。如果它出现在命令行之后,则初始堆大小将设置为用 -Xms-XX:InitalHeapSize 指定的值。
-Xmx: 指定 jvm 堆的最大值,默认为物理内存的 1/4 或者 1G,最小为 2M;单位与 - Xms 一致。对于服务器部署,-Xms 和 - Xmx 通常设置为相同的值。该选项等效于 -Xmx-XX:MaxHeapSize .
-Xss: 设置单个线程栈的大小,一般默认为 512k。
-XX:+UseConcMarkSweepGC:使用 ParNew + CMS + Serial Old 的收集器组合进行内存回收,Serial Old 作为 CMS 出现 “Concurrent Mode Failure” 失败后的后备收集器使用。
XX:+CMSParallelRemarkEnabled :降低标记停顿
-XX:+UseCMSCompactAtFullCollection:由于 CMS 收集器会产生碎片,此参数设置在垃圾收集器后是否需要一次内存碎片整理过程,仅在 CMS 收集器时有效
-XX:LargePageSizeInBytes:内存页的大小不可设置过大,会影响 Perm 的大小,-XX:LargePageSizeInBytes=128m,需要 OS 支持
-XX:+UseFastAccessorMethods: 频繁反射时,生成字节码来加速
-XX:CMSInitiatingOccupancyFraction=70: 设置 CMS 收集器在老年代空间被使用多少后出发垃圾收集,默认值为 70%,仅在 CMS 收集器时有效
-XX:+HeapDumpOnOutOfMemoryError: 发生 OOM 的时候自动 dump 堆栈方便分析
-XX:MaxMetaspaceSize: 元空间的最大本地内存
参考文档:
https://blog.victorchu.info/posts/4a4d773a/
|