一. 原始编译命令如下:
java -server -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.net.preferIPv6Addresses=false -Djava.io.tmpdir=/tmp -Djetty.defaultsDescriptor=WEB-INF/web.xml -Duser.timezone=GMT+08 -Xloggc:/var/sankuai/logs/waimai_service_cpc_qs.gc.log.201612151534 -XX:ErrorFile=/var/sankuai/logs/waimai_service_cpc_qs.vmerr.log.201612151534 -XX:HeapDumpPath=/var/sankuai/logs/waimai_service_cpc_qs.heaperr.log.201612151534 -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Denvironment=online -Dmedis_environment=online -Dcore.zookeeper=sgconfig-zk.vip.sankuai.com -Dapp.key=waimai_service_cpc_qs -Djetty.appkey=waimai_service_cpc_qs -Dapp.host=dx-waimai-service-cpcqs09 -Djetty.host=host -Dapp.ip=ip -Dapp.port=8476 -Djetty.port=8476 -Dapp.context=/ -Djetty.context=/ -Dapp.workdir=/opt/meituan/apps/waimai_service_cpc_qs/work -Dapp.logdir=/var/sankuai/logs -Djetty.logs=/var/sankuai/logs -Dconfig.type=prod -Xmx4096m -Xms4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+PrintCommandLineFlags -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=0 -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -XX:-OmitStackTraceInFastThrow -XX:NewRatio=3 -XX:ParallelCMSThreads=8 -XX:+CMSParallelRemarkEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -Djetty.webroot=/opt/meituan/apps/waimai_service_cpc_qs/work -cp WEB-INF/lib/mms-boot-1.2.2.jar com.sankuai.mms.boot.Bootstrap
二. 分类后的编译参数如下
参数总量47,其中系统属性23,jvm参数24
-
-D<name>=<value> set a system property 设置系统属性
-
- -Dapp.context=/
- -Dapp.host=dx-waimai-service-cpcqs09
- -Dapp.ip=10.32.104.100
- -Dapp.key=waimai_service_cpc_qs
- -Dapp.logdir=/var/sankuai/logs
- -Dapp.port=8476
- -Dapp.workdir=/opt/meituan/apps/waimai_service_cpc_qs/work
- -Dconfig.type=prod
- -Dcore.zookeeper=sgconfig-zk.vip.sankuai.com
- -Denvironment=online
- -Dmedis_environment=online
- -Duser.timezone=GMT+08
- -Djava.io.tmpdir=/tmp :
- -Djava.net.preferIPv6Addresses=false : 禁用ipV6,使用ipV4
- -Djetty.appkey=waimai_service_cpc_qs
- -Djetty.context=/ : 设置上下文路径,既访问路径的根路径
- -Djetty.defaultsDescriptor=WEB-INF/web.xml : 设置描述,作为hander加载使用
- -Djetty.host=dx-waimai-service-cpcqs09 : jetty所在主机的IP或主机名;
- -Djetty.logs=/var/sankuai/logs
- -Djetty.port=8476 :设置jetty的端口号;
- -Dsun.jnu.encoding=UTF-8 : 影响文件名的创建
- -Dfile.encoding=UTF-8 : 影响到文件内容
- -Djava.compiler=NONE : 关闭JIT编译,默认使用JIT编译,编译器调优
2. 设置JVM参数
Hotspot JVM提供以下三大类选项:
1. 标准选项:这类选项的功能是很稳定的,在后续版本中也不太会发生变化。运行Java或者java -help可以看到所有的标准选项。所有的标准选项都是以-开头,比如-version, -server等。
2. X选项:比如-Xms。这类选项都是以-X开头,可能由于这个原因它们被称为X选项。运行java -X命令可以看到所有的X选项。这类选项的功能还是很稳定,但官方的说法是它们的行为可能会在后续版本中改变,也有可能不在后续版本中提供了。
3. XX选项:这类选项是属于实验性,主要是给JVM开发者用于开发和调试JVM的,在后续的版本中行为有可能会变化。
-
-
如果是布尔类型的选项,它的格式为-XX:+flag或者-XX:-flag,分别表示开启和关闭该选项。
-
针对非布尔类型的选项,它的格式为-XX:flag=value
-
-
- 标准选项
-
- -server : Server VM的初始堆空间会大一些,默认使用的时并行垃圾回收器
- -client: Client VM相对来讲会保守一些,初始堆空间会小一些,使用串行的垃圾回收器,它的目标是为了让JVM的启动速度更快(仅在32位机器有效)
b. 堆设置
-
-
- -Xms4096m :初始堆大小
- -Xmx4096m :最大堆大小
- -XX:NewSize=n :设置年轻代大小
- -XX:NewRatio=3: 设置年轻代和年老代的比值,不能少于1,如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
- -XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:8,表示Eden:Survivor=8:2,一个Survivor区占整个年轻代的1/10
- -XX:MaxPermSize=512m :设置持久代大小
- -XX:PermSize=256m : 设置永久区的初始空间
-
c. 收集器设置
-
-
- -XX:+UseConcMarkSweepGC :设置并发收集器
- -XX:+DisableExplicitGC : 忽略手动调用GC的代码使得 System.gc()的调用就会变成一个空调用,完全不会触发任何GC
- -XX:+ExplicitGCInvokesConcurrent : 可以显式触发CMS的fullgc
- -XX:+HeapDumpOnOutOfMemoryError : 当JVM发生OOM时,自动生成DUMP文件到下面的-XX:HeapDumpPath。
- -XX:HeapDumpPath=/var/sankuai/logs/waimai_service_cpc_qs.heaperr.log.201612151534 : 日志路径
- -XX:-OmitStackTraceInFastThrow : 强制要求每次都要抛出有堆栈的异常(使用-server模式时,该优化选项是开启的,因此在频繁抛出某个异常一段时间后,该优化开始起作用,即只抛出没有堆栈的异常信息)
-
d. 垃圾回收统计信息
-
- -XX:+PrintGC : 可以打印GC的简要信息
- -XX:+PrintGCDetails :打印GC的详细信息
- -XX:+PrintCommandLineFlags : 可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX选项,建议加上这个选项以辅助问题诊断
- -XX:+PrintGCDateStamps
- -Xloggc:filename : 指定GC log的位置,以文件输出
- -XX:ErrorFile=/var/sankuai/logs/waimai_service_cpc_qs.vmerr.log.201612151534
-
-
e. 并行收集器设置
-
- -XX:ParallelGCThreads=n :设置年轻代的并行收集器收集时使用的CPU数。并行收集线程数。
- -XX:ParallelCMSThreads=8 : CMS并行线程数
- -XX:CMSInitiatingOccupancyFraction=80 : 指定在老生代用掉多少内存后开始进行垃圾回收
- -XX:+CMSClassUnloadingEnabled:垃圾回收会清理持久代,移除不再使用的classes,这个参数只有在 UseConcMarkSweepGC 也启用的情况下才有用。
- -XX:+CMSParallelRemarkEnabled : 为了减少第二次暂停的时间,开启并行remark
- -XX:+CMSPermGenSweepingEnabled : 激活永久代CMS收集
- -XX:+UseCMSCompactAtFullCollection : 使用并发收集器时,开启对年老代的压缩
- -XX:CMSFullGCsBeforeCompaction=0 : 上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩
-