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. 参考文档
官方oracle宝典细读-VM Heap Size and Garbage Collection
(可以得出gc服务时间占比5%最佳,heap size设置考究)