JAX London:使用Java飞行记录器实现生产环境的性能分析_Ubuntu_青云站长教程网
欢迎来到站长教程网!
  • 秒到短信接口 免费试用
  • 微信支付宝接口 秒结算
  • 中文网站排名|申请加入
  • 搜索引擎全站查询
  • 查询移动网站权重数据
  • 海外主机 台湾公司直销
  • Ubuntu

    当前位置:主页 > 服务器教程 > Ubuntu >

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    时间:2019-09-11|栏目:Ubuntu|点击:
  • 在今年的JAX London上,来自甲骨文Java平台组的Ola Westin介绍了Java任务控制(Java Mission Control,JMC)和Java飞行记录器(Java Flight Recorder,JFR)的功能。

    Westin首先在整体上介绍了JMC和JFR,然后为观众展示了如何创建和分析记录(recording)并为观众提供了一个样例。在本文中,InfoQ将会带领读者回顾Westin的演讲。

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    Java任务控制概览

    Java任务控制是一个图形化的界面,它借助JMX控制台(提供了服务器的原始视图)和Java飞行记录器(Java Flight Recorder)(收集、分析和诊断应用的数据)的帮助,能够可视化Java虚拟机(Java VM)的行为。

    JMC(jmc命令)打包在了Java开发工具集中(JDK),位于bin目录下。额外的日志可以通过使用 –consoleLog –debug选项来启用。各种体验式的插件(比如针对DTrace、JMX控制台的插件)也可以进行在JMC中进行下载。

    Java飞行记录器概览

    Java飞行记录器会收集Java应用程序以及Java VM的行为信息。JFR构建在了Java VM之中,能够为用户提供运行时的信息。使用JFR并不会影响其他的Java VM优化,它的最小开销会小于2%。

    JFR有不同的事件,比如即时事件(instant event)、持续事件(duration event)以及可请求事件(request-able event)。即时事件只会在某个时间点发生(比如线程启动),因此它的开销最小,但是持续事件(如垃圾收集等)是基于阈值的,与之类似,可请求事件(比如方法分析采样)基于可配置的时间段,因此这些事件的开销差异很大。

    JFR的采样性能分析器并不需要线程处于安全点上,也不会记录每个方法的调用(它只会探测热点方法)。按照该演讲所述,对于调用原生方法的线程,并没有与之相关的采样。

    有两种不同类型的记录:固定时间(性能分析)的记录以及持续的记录,它们都会dump到一个文件中。

    创建记录

    要使用JFR来创建记录,我们需要在启动JVM的时候添加如下的命令行选项:-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

    从Java 8 update 40开始,我们还可以在运行时通过JMC或者jcmd方案来创建JFR记录。

    如下的三幅图片分别展现了如何利用上述的三种方案来创建JFR记录。

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    我们还可以按照下图的方式记录远程的系统:

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    分析记录

    在演讲中,Westin强调在进行任何的深入调查之前,提出正确问题是非常重要的。接下来他给出了一个样例,这个样例阐述了“热点方法”的问题,如下所示:

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    在这里,当“Hot Methods” tab选中的时候,我们可以看到LinkedList.indexOf(Object)占据了总采样数量的97.35%。在深入研究调用栈的时候,我们发现在链式列表中有一个contains(Object)方法,这个方法需要O(n)的迭代。为了解决这个问题,Westin运行了另外一个JFR记录,将LinkedList替换为HashSet,它的结果如下所示:

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    随后,Westin又介绍了两个样例:其中一个是关于线程竞争的,另一个是因为自动装箱所导致的内存分配。最后,他进行了总结展望,相关的slide如下所示:

    JAX London:使用Java飞行记录器实现生产环境的性能分析

    查看英文原文:JAX London: Production Time Profiling Using Java Flight Recorder

    上一篇:零基础如何入门Python

    栏    目:Ubuntu

    下一篇:Java守护线程的理解笔记

    本文标题:JAX London:使用Java飞行记录器实现生产环境的性能分析

    本文地址:http://www.jh-floor.com/fuwuqijiaocheng/Ubuntu/50151.html

    您可能感兴趣的文章

    广告投放 | 联系我们 | 版权申明

    重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

    Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号