写点什么

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

  • 2016-10-27
  • 本文字数:1239 字

    阅读完需:约 4 分钟

在今年的 JAX London 上,来自甲骨文 Java 平台组的 Ola Westin 介绍了 Java 任务控制(Java Mission Control,JMC)和 Java 飞行记录器(Java Flight Recorder,JFR)的功能。

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

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 记录。

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

分析记录

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

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

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

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

2016-10-27 19:006924

评论

发布
暂无评论
发现更多内容

CertiK CSO Dr. Kang Li 确认出席Hack .Summit() 香港区块链盛会

TechubNews

人工智能引领软件测试新的巨大变革

霍格沃兹测试开发学社

SD-WAN在银行的应用:降低维护成本、提升网络安全

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

英特尔亮相MWC 2024,助力企业通过现代化以实现盈利

E科讯

深圳企业要知道的:堡垒机就选行云管家!

行云管家

网络安全 堡垒机

unsubscribe:Angular 项目中常见场景以及是否需要 unsubscribe

OpenTiny社区

前端 angular

deepin Meetup成都站来了!一起聊聊deepin-IDE 2.0,还有礼品可以拿!

nn-30

flutter Linux 操作系统 linux开发 deepin

都说了别用BeanUtils.copyProperties,这不翻车了吧

不在线第一只蜗牛

Java 数据库 后端 Java后端

金三银四,聊一聊测试跳槽/面试的必备技能

霍格沃兹测试开发学社

软件测试学习笔记丨Docker网络模式与Docker-compose介绍

测试人

软件测试 测试开发

吴恩达AI系列第一课:教你如何利用AI创建一个披萨店客服

CodeBuddy

Cloud Cloud Studio 人工智能、

为多渠道销售集成商品API接口的正式步骤指南

Noah

SD-WAN与MPLS哪一个是最优选择?

Ogcloud

SD-WAN MPLS SD-WAN组网 SD-WAN服务商 SDWAN

火山引擎“数据飞轮”助力教育行业持续优化产品

极客天地

强大好用的shell:什么是shell?

小魏写代码

智能护航:人工智能引领软件测试新革命

测吧(北京)科技有限公司

测试

如何评价OpenAi发布的视频生成模型Sora?

算法的秘密

SD-WAN技术简化企业网络架构的关键优势

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

深入解析 Java 面向对象编程与类属性应用

伤感汤姆布利柏

Java js java

苹果上架App被拒绝的原因

面试官:说一下红锁RedLock的实现原理?

王磊

Java 面试

解锁财务信任,掌握企业业务合作中的倾听艺术

智达方通

业财融合 全面预算管理 财务管理 经营管理

我是如何参与 Apache Calcite 社区并成为 Committer 的

LakeShen

大数据 开源 Apache Calcite apache 社区 Calcite

AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验

汀丶人工智能

大模型 智能标注 RLHF

华为云携十大系统性创新亮相巴塞罗那 打造最适合AI的基础设施

华为云开发者联盟

云计算 AI 华为云 华为云开发者联盟

遇见您的私人法律顾问:智能法律大模型,智能解答您的法律困惑

汀丶人工智能

人工智能 智能问答 法律大模型

优雅使用前端枚举Enum,符合国标的那种!

不在线第一只蜗牛

前端 开发 前端框架 Enum

JAX London:使用Java飞行记录器实现生产环境的性能分析_Java_Monica Beckwith_InfoQ精选文章