C、R2M、SGM:
if [[ "$JAVA_VERSION" -ge 11 ]]; then
SGM_OPTS="${SGM_OPTS} --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED --add-opens java.management/sun.management=ALL-UNNAMED --add-opens java.management/java.lang.management=ALL-UNNAMED " UMP_OPT=" --add-opens java.base/sun.net.util=ALL-UNNAMED "
JSF_OPTS=" --add-opens java.base/sun.util.calendar=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED"
WORMHOLE_OPT=" --add-opens java.base/sun.security.action=ALL-UNNAMED "
MB_OPTS=" --add-opens java.base/java.lang=ALL-UNNAMED "
DUC_OPT=" --add-opens java.base/java.net=ALL-UNNAMED "
R2M_OPT=" --add-opens java.base/java.time=ALL-UNNAMED "
fi
启动后完整的启动参数如下:
-javaagent:/export/package/sgm-probe-java/sgm-probe-5.9.5-product/sgm-agent-5.9.5.jar -Dsgm.server.address=http://sgm.jdfin.local -Dsgm.app.name=market-reduction-center -Dsgm.agent.sink.http.connection.requestTimeout=2000 -Dsgm.agent.sink.http.connection.connectTimeout=2000 -Dsgm.agent.sink.http.minAlive=1 -Dsgm.agent.virgo.address=10.24.216.198:8999,10.223.182.52:8999,10.25.217.95:8999 -Dsgm.agent.zone=m6 -Dsgm.agent.group=m6-discount -Dsgm.agent.tenant=jdjr -Dsgm.deployment.platform=jdt-jdos --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=java.management/java.lang.management=ALL-UNNAMED -DJDOS_DATACENTER=JXQ -Ddeploy.app.name=jdos_kj_market-reduction-center -Ddeploy.app.id=30005051 -Ddeploy.instance.id=0 -Ddeploy.instance.name=server -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.util.Arrays.useLegacyMergeSort=true -Dog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dlog4j2.AsyncQueueFullPolicy=Discard -Xmx12g -Xms12g -XX:MaxMetaspaceSize=256m -XX:MetaspaceSize=256m -XX:MaxDirectMemorySize=2048m -XX:+UseZGC -XX:ZAllocationSpikeTolerance=3 -XX:ParallelGCThreads=8 -XX:CICompilerCount=3 -XX:-RestrictContended -XX:+AlwaysPreTouch -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/logs --add-opens=java.base/sun.net.util=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Dloader.path=/export/package/jdos_kj_market-reduction-center/conf
系统验证
系统可以成功启动后,就可以进行功能验证。有几个验证重点与方法:
-
首先可以通过单元测试快速进行系统全面回归,避免出现 JDK API、中间件 API 变更导致的业务异常
-
部署到测试环境,验证各个中间件是否正常,如 DUCC 开关下发,MQ 收发,JSF 接口调用等等,系统中所有用到的中间件都需要一一验证
-
然后可以开始进行核心业务的验证,这时候可以利用测试同学的测试自动化能力加人工补充场景,快速进行核心业务回归。其中研发需要观察系统被调用时的所有异常日志,包括警告,明确每条日志产生的原因
-
验证完成后,可以部署到联调环境,利用外部同事联调时的请求进一步进行验证
-
充分在测试环境观察后,部署至预发环境,利用外部同事联调时的请求进一步进行验证,并进行常态化压测,验证优化效果与瓶颈
-
经过预发长时间验证,没有问题后,部署一台生产,通过回放生产流量进一步进行验证
-
回放流量无异常后,开始承接生产流量,按接口开量,进行若干周的观察
-
逐步切量,直到全量上线
GC 调优
ZGC 介绍
如图所示,ZGC 的定位是一个最大暂停