写点什么

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

评论

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

从芯片公司到VR,字节跳动为了元宇宙加码布局

海比研究院

北鲲云如何为企业提供混合云解决方案

北鲲云

👊【Spring技术实战】分析探究RedisTemplate的序列化和反序列化+泛型机制

码界西柚

spring 序列化 RedisTemplate 10月月更

linux之curl使用技巧

入门小站

Linux

3面蚂蚁,一路过关斩将 成功拿到offer定级P6,大厂面试雀食有点难!

进击的王小二

java面试 大厂面试 阿里巴巴面经总结 java

来,肝了这份网络安全学习计划无敌

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 学习安全

以“有用”为圆心:重新认识智慧城市的“高手之路”

脑极体

揭秘!探访百度AI反诈第一线

脑极体

欢庆1024程序员节,开源茁壮成长

Zilliz

创业 开源 程序员 成长

Leetcode 题目解析:96. 不同的二叉搜索树

程序员架构进阶

算法 LeetCode 10月月更

解决网卡“Device eth0 does not seem to be present, delaying initialization”

耳东@Erdong

Linux 10月月更

华为云企业级Redis:助力VMALL打造先进特征平台

华为云数据库小助手

GaussDB GaussDB ( for Redis ) 华为云数据库

EMQ 在2021电力人工智能大会:稳健数据基础设施架构支撑电力数字化发展

EMQ映云科技

人工智能 物联网 电力 mqtt

开源应用中心 | KodBox快捷高效的私有云在线文档管理系统

开源技术

声网发布融合CDN直播等系列新品,拓宽RTE产品边界

ToB行业头条

声网

HarmonyOS Connect伙伴峰会,车载智慧屏S50正式发布

科技汇

数字化转型请从一个清晰的定义开始 | DBT What

王和全

人工智能 大数据 数字化转型 数字化 数字经济

024云原生之软件部署策略

穿过生命散发芬芳

云原生 10月月更

官方线索|FATE开源社区1024程序员节福利

石云升

1024我在现场 10月月更

利用基数排序LSD方法给等长字符串按字典序排序

Regan Yue

算法 10月月更

打造价值交付体系,企业 CIO 如何应对 DevOps 命题?

BoCloud博云

DevOps 云原生

硝烟弥漫的安全战场,只等一位超级英雄登场

白洞计划

面试了一个34岁的Java大佬,感觉到他背过很多面试题,年薪50w面试基本都能答得上

Java java面试 java架构

Stream 操作

风翱

stream 10月月更

Android 音视频 - EGL 源码解析以及 C++ 实现

RTE开发者社区

android 音视频 OpenGL ES

我的新下属都怀念老领导,我该把他们全部开除吗?

石云升

职场经验 10月月更

从区块链到元宇宙 Metaverse

devpoint

区块链 元宇宙 10月月更

再谈字节小程序

字节跳动终端技术

小程序 字节跳动 火山引擎

【得物技术】时间切片的实践与应用

得物技术

架构 性能优化 大前端 性能 业务

自定义View:resolveSizeAndState方法

Changing Lin

10月月更

GrowingIO 数据安全实践

GrowingIO技术专栏

隐私保护 数据安全 隐私安全 数据安全法

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