一个计算机技术爱好者与学习者

0%

JVM参数设置规范描述

1. 配置模板

1
-Xms2304m -Xmx2304m -XX:NewRatio=2 -XX:G1HeapRegionSize=8m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:MaxTenuringThreshold=10 -XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=45 -XX:MaxGCPauseMillis=200 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintReferenceGC -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=6 -XX:GCLogFileSize=32m -Xloggc:logs/gc.log.$(date +%Y%m%d%H%M) -Dfile.encoding=UTF-8 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

1)无论如何参数中-XX:MaxMetaspaceSize=256m,此参数不要改动。所有类型的机型都一样。
2)GC回收器,统一使用G1。
3)其他参数,meteor 2.x与其他类型项目略有不同。
4)Xms和Xmx的值保持相同。

2. heap大小设置

1、标准机型
内存1G的机器,jvm参数保持默认,不再设置xmx和xms。
内存2G[±200M],heap大小为1G。
内存4G[±200M],heap大小为2G。
内存8G[±200M],heap大小为4G。
内存16G,heap大小为12G。

2、非标准机型和容器
对于非标准机型或者容器内存,统一计算方式为:

1
heap大小 = (总内存 - 256M) * 60%

以内存为4G的docker容器为例:

1
heap大小 = (4096 - 256) * 60% = 2304M

因此Xms和Xmx为:

1
-Xms2304m -Xmx2304m

3. GC频次调优评估参考(通用WEB系统)

1、YGC,5到10S一次,暂定规则:为10次/分钟。
2、FGC,数小时甚至数天一次,暂定规则:2次/天。
3、GC时间占比标准 小于等于 5%
如果你的应用GC频次超出上述规则,需要调优或者评估规则可行性。

4. 例子

4.1. spring boot

1
set -e && cd <workDir>/<appName> && source /etc/bashrc && java -Xms2304m -Xmx2304m -XX:NewRatio=2 -XX:G1HeapRegionSize=8m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:MaxTenuringThreshold=10 -XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=45 -XX:MaxGCPauseMillis=200 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintReferenceGC -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=6 -XX:GCLogFileSize=32m -Xloggc:logs/gc.log.$(date +%Y%m%d%H%M) -Dfile.encoding=UTF-8 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -javaagent:/opt/vipkid/jmx_agent.jar=18080:- -jar <packageName> --server.port=<port>

4.2. meteor2

1
set -e && cd <workDir>/<appName> && source /etc/bashrc && JMX_PORT=9999 JAVA_OPTS="-Xms2304m -Xmx2304m -javaagent:/opt/vipkid/vkcat-agent-1.0.2/vkcat-agent-1.0.2.jar -DapplicationDomain=<appName> -DvkcatDomain=vkcat.vipkid.com.cn:80 -javaagent:/opt/vipkid/jmx_agent.jar=18080:-" ./application.jar start --profile=prod --cloud=ali && tail -f std.out

5. 参考文档

jvm参数和gc普及

初步诊断你的GC

从实际案例聊聊Java应用的GC优化

官方oracle宝典细读-Tuning Tips

官方oracle宝典细读-VM Heap Size and Garbage Collection
(可以得出gc服务时间占比5%最佳,heap size设置考究)

4G内存设置的过程宝典-5 Tips for Proper Java Heap Size

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-jvm-params/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~