-
Notifications
You must be signed in to change notification settings - Fork 498
阿里巴巴Dragonwell8用户指南
阿里巴巴有着最丰富的Java应用场景,覆盖电商,金融,物流等众多领域,世界上最大的Java用户之一。 作为OpenJDK的下游, Alibaba Dragonwell是阿里巴巴内部OpenJDK定制版AJDK的开源版本, AJDK为在线电商,金融,物流做了结合业务场景的优化,运行在超大规模的,100,000+ 服务器的阿里巴巴数据中心。 Alibaba Dragonwell与Java SE标准兼容,目前仅支持 Linux/x86_64平台。 Alibaba Dragonwell是OpenJDK的下游(friendly fork),使用了和OpenJDK一样的licensing。阿里会更紧密地和OpenJDK等开源社区协作, 贡献更多的patches, 促进Java技术的持续发展。
目前Alibaba Dragonwell只支持Linux x86-64平台,您可以通过如下步骤使用Alibaba Dragonwell
- 选项 1, 下载预编译的Dragonwell二进制包
- 从Alibaba Dragonwell的Github页面下载二进制tar包,链接 https://github.com/alibaba/dragonwell8/releases
- 将下载下来的tar包解压到目标安装目录即可
- 选项 2, 使用YUM工具安装
(施工中,即将到来)
只适用于RedHat, CentOS和AliOS等系统
- 添加阿里云的RPM仓库到您本地的/etc/repos.d/中
- 执行 yum makecache 更新YUM缓存
- 使用下面YUM命令安装Dragonwell
yum install dragonwell-8
将您的应用脚本或者环境变量中的JDK目录变量(一般是JAVA_HOME)指向上一步中安装的Alibaba Dragonwell目录。 重启应用以使用Alibaba Dragonwell JDK配置
JWarmup的基本原理: 根据前一次程序运行的情况,记录下热点方法、类编译顺序等信息,在应用下一次启动的时候积极加载相关的类,并积极编译相关的方法,进而应用启动后可以直接运行编译好的Java代码(C2编译)。
上图显示了JWarmup典型的用法:
- 在Beta灰度环境,进行应用压测,记录下热点方法、类编译顺序等信息。
- 在Production环境,使用提前记录的profiling data提前编译热点方法。
- 记录阶段(一般是beta环境), 使用CMS的示例,在5分钟后生成profiling data:
java -XX:-ClassUnloading -XX:-CMSClassUnloadingEnabled -XX:-ClassUnloadingWithConcurrentMark -XX:CompilationWarmUpLogfile=jwarmup.log -XX:+CompilationWarmUpRecording -XX:CompilationWarmUpRecordTime=300
注: 目前记录模式暂不支持类卸载。
- 使用阶段(一般是生产环境)
-XX:+CompilationWarmUp -XX:-TieredCompilation -XX:CompilationWarmUpLogfile=jwarmup.log -XX:CompilationWarmUpDeoptTime=0
注: 目前编译模式暂不支持分层编译。
注: JWarmUp会在指定时间退优化warmup编译的方法,设置CompilationWarmUpDeoptTime为0可以取消这个定时。
- 根据你的代码逻辑“个性化”JVM的编译时机 在你的应用启动完成后(完成了非常必要的初始化),通过以下API通知JVM你的启动完成:
com.alibaba.jwarmup.JWarmUp.notifyApplicationStartUpIsDone()
Java Flight Recorder (JFR) 是一款用于收集Java应用运行过程中的诊断及性能数据的工具,目前已经被集成进Alibaba Dragonwell中。在使用默认配置的情况下,JFR带来的额外开销将小于2%,因此可以用在生产环境。
Alibaba Dragonwell通过参数EnableJFR来控制是否打开JFR功能,默认关闭。你可以使用 ‘-XX:+EnableJFR’ 开启JFR,如:
java -XX:+EnableJFR -XX:StartFlightRecording=duration=1m,filename=rec.jfr MyApp
在使用JTreg跑测试用例时,需要增加一个参数 -vmoption:-XX:+EnableJFR
,否则jfr相关的测试会失败。如:
make test JTREG_TEST_EXTRA_OPTIONS=-vmoption:-XX:+EnableJFR TEST=jdk_jfr
JMC可以用于分析JFR产生的事件记录,需要使用7.0及以上版本。 目前JMC还不能用来控制Alibaba Dragonwell的JFR, 在下一个版本我们会修复这个问题。 关于JFR及JMC更详细的信息,可以参考Oracle的文档。
- 迷你Heapdump支持
Alibaba Dragonwell允许您在使用
jmap
工具生成heapdump的时候忽略掉所有原始类型数组的内容,只dump出对象引用等信息,从而缩小生成的Heapdump文件大小。使用时,只需要给-dump
子命令添加mini
参数即可。
示例命令:
jmap -dump:live,mini,format=b,file=heap121.bin <PID>
-
-XX:+PrintYoungGenHistoAfterParNewGC
这个参数会打印在一次ParNew GC之后的young区对象的histogram。该参数可以通过jinfo动态打开:
jinfo -flag +PrintYoungGenHistoAfterParNewGC <pid>
-
-XX:+PrintGCRootsTraceTime
这个参数会打印一次ParNewGC的具体耗时,类似于G1的gclog显示,这个参数主要用于用户排查时间较长的gc暂停时间。该参数可以通过jinfo动态打开关闭:
jinfo -flag +PrintGCRootsTraceTime <pid> // turn on the flag
jinfo -flag -PrintGCRootsTraceTime <pid> // turn off the flag
修正GC日志中metaspace数值显示错误 原先GC日志中在每次Full GC之后显示metaspace数值可能是错误的,Alibaba Dragonwell修复了这个问题
-
-XX:ArrayAllocationWarningSize=<Size>
增加参数-XX:ArrayAllocationWarningSize=xxx
,默认值512M。当分配大对象的大小超过该值的时候,标准输出中打印大数组的分配堆栈,用来排查大数组分配导致的GC问题。
该参数可以通过jinfo动态修改:
// print the allocation stack if more than 1M array allocated
jinfo -flag ArrayAllocationWarningSize=1048576 <pid>
// back to default value(512M)
jinfo -flag ArrayAllocationWarningSize=536870912 <pid>
如果您需要获取关于Alibaba Dragonwell的支持信息,请首先查看Alibaba Dragonwell FAQ文档。 或者您也可以发送电子邮件到 dragonwell_use@googlegroups.com 寻找帮助。 您也可以使用钉钉扫描下面二维码加入群聊获取支持
Alibaba Dragonwell