开发者社区> 问答> 正文

如何使用JWarmup功能?

如何使用JWarmup功能?

展开
收起
1358896759097293 2021-05-04 15:29:53 1825 0
1 条回答
写回答
取消 提交回答
  • 45271990@qq.com

    2.png

    下面根据一个简单的例子展示如何使用JWarmup功能。 上方为一个简单的 Java程序,在这个程序之中有一个循环用来模拟线上应用的一个热点,循环会反复调用一个方法。

    (二)Recording 如何去使用JWarmup的记录功能Recording? 首先,从http://dragonwell-jdk.io/下载Dragonwell 8; 添加JVM参数启动JWarmup的记录功能:

    -XX:+CompilationWarmUpRecording
    -XX: CompilationWarmUpRecording=30
    -XX: CompilationWarmUpLogfile=./jwarmup.log
    -XX:-ClassUnloading
    
    

    第一个参数表示去打开JWarmup的记录功能; 第二个参数表示需要记录的时间,在当前Demo之中选择记录30秒; 第三个参数表示记录编译信息生成文件的路径,在这个Demo中,我们将这个文件生成在当前目录下的jwarmup.log这个文件; 第四个参数是由于JWarmup的Recording功能不支持ClassUnloading,所以需要将这一功能关闭。

    当设定的记录时间到了以后,JWarmup会将记录好的编译信息输出到指定的文件之中,同时会在应用程序的输出中看到以下这样一条日志,表明记录是成功的。

    (三)Replaying 如何使用JWarmup的Replaying功能? 添加JVM参数:

    -XX:+CompilationWarmUp
    -XX:+CompilationWarmUpLogfile=./jwarmup.log
    -XX:+PrintCompilationWarmUpDetail
    
    

    第一个参数表示要使用JWarmup的编译功能; 第二个参数需要指定刚刚记录的包含编译信息的文件,在当前Demo之中,就是刚刚所记录的当前目录下的jwarmup.log文件; 第三个参数表示我希望JWarmup打印出一些详细的日志,帮助我记录JWarmup工具的一些行为。

    当把这些参数配置好以后,将服务启动,等待一些关键的类的加载完成,可以使用jcmd JWarmup -notify主动触发Warmup的编译。 当Warmup编译完成后,可以在程序的标准输出中看到下面三条log,就表示这一次Warmup编译是成功的。

    以上就是关于JWarmup的基本介绍,包含JWarmup所需要解决的问题,解决方法,以及用案例讲述如何使用JWarmup功能。同时,我们对JWarmup这个功能还做了非常多的改进,形成了我们另外一份工作:JWarmup2。 3.png

    上方为JWarmup2整体流程图,可以看到在这份工作之中,我们记录了更加丰富的信息,去更好的解决应用程序预热的问题。 首先我们会使用JFR(Java Flight Recorder)统一所记录的编译的信息,这些信息也可以形成一个JFR文件,使用JDK官方所提供的Java Mission Control浏览所记录的所有热点方法的信息。 此外,我们除了记录一些方法的编译,还记录了每一个方法它所依赖的类的信息。这样子在我们第二步预热的时候,就可以根据这些依赖的信息,当我们看到一个方法,它所有的依赖的类都被加载了以后,就会自动触发这个方法的Warmup编译,避免了人工手动触发Warmup编译。 此外,我们还额外记录了这些方法所有的Profiling信息,这些信息能够帮助我们在第二步去更好地生成Warmup的代码,从而进一步提高应用程序的性能。

    2021-05-05 22:44:46
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
ReactNative启动性能优化 立即下载
函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务 立即下载
荷鲁斯 移动端第三方库安全检查引擎介绍 立即下载