写点什么

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:007023

评论

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

什么是无代码?无代码开发平台又是什么?

积木链小链

无代码 无代码平台

鸿蒙开发案例:打地鼠

zhongcx

数据结构 - 散列表,三探之代码实现

不在线第一只蜗牛

数据结构

如何通过指标驱动研发体系建设

思码逸研发效能

DevOps 研发效能 效能度量 研发效能管理 思码逸

薅羊毛了!百万度算力免费申领活动狂欢继续!

九章云极DataCanvas

从人员外包到测试工具、测试平台,提供全方位的测试解决方案~

霍格沃兹测试开发学社

通义灵码知识库问答增强:知识库构建与管理指南

阿里巴巴云原生

阿里云 云原生 通义灵码

通义灵码知识库问答增强:知识库构建与管理指南

阿里云云效

阿里云 云原生 通义灵码

推特账号被冻结怎么办?检查IP是否正常

Ogcloud

云手机 海外云手机 海外原生IP 海外IP

云原生开源开发者沙龙丨AI 应用工程化专场杭州站邀您参会

阿里巴巴云原生

阿里云 云原生

Alfred 5中文安装包 Mac 上的效率瑰宝!

Rose

老好人无法成为好的管理者

老张

团队管理 技术管理 绩效管理

最大程度降低“去O”的迁移风险

NineData

数据库 复制 迁移 同步 NineData

全新HUAWEI MatePad 11.5发布:搭载华为教育中心,做更好的学习神器

最新动态

LeetCode题解:2648. 生成斐波那契数列,迭代+递归,超详细解析

Lee Chen

立足云南,面向“两亚”,翻开普惠算力新篇章

九章云极DataCanvas

天润融通邀您参加AI破局·聚力增长行业论坛

天润融通

用户增长 AI大模型 用户运营 天润融通

指标平台在企业数据管理中的定位及其如何与BI、数仓的协同工作?

Aloudata

数据分析 指标体系 指标平台 指标开发

指标预警归因分析,及时发现业务问题,快速定位问题根因

Aloudata

数据分析 指标平台 指标开发

程序员提效的 10 个方法,建议收藏

秃头小帅oi

知识管理系统是什么?

ServiceDesk_Plus

知识管理系统 知识管理软件

如何成为一名优秀的程序员,进来看看

伤感汤姆布利柏

能操控电脑的 Computer Use 究竟是什么?万能胶水、旧世界操作员,还是无所不在的智能?| 播客《编码人声》

声网

AI 原生时代,更要上云:百度智能云云原生创新实践

百度Geek说

软件测试学习笔记丨Flask框架-请求与响应

测试人

flask 软件测试

实时特征框架的生产实践|得物技术

得物技术

flink 性能优化 数据平台 特征框架

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