2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

云备份技术解析:云容灾 CT-CDR 关键技术介绍

天翼云开发者社区

云备份 云灾备

MySQL备份文件导入GreatSQL MGR环境为什么出现大量报错?

GreatSQL

C语言 AI 通义灵码 VSCode插件安装与功能详解

阿里云云效

C语言

如何使用BOM和MRP解决生产物料管理混乱问题

积木链小链

数字化转型 智能制造 物料管理

如何使用通义灵码玩转Linux - AI编程助手提升效率

阿里云云效

Liunx

千万级数据秒级响应!碧桂园服务技术引擎重构智慧社区新标杆

StarRocks

存算分离 StarRocks 湖仓一体 数据查询 OLAP 数据库

故障定位系列-3-容器资源故障

乒乓狂魔

可观测性 故障定位 AIOPS

DePIN 之于传统基础设施,正如同 DeFi 之于传统金融

PowerVerse

defi web3 DePIN

App上线Google Play的流程

北京木奇科技有限公司

APP外包 海外APP上线 google play

C++ AI 通义灵码 VSCode插件安装与功能详解

阿里云云效

c++ 通义灵码

如何使用通义灵码玩转Linux - AI编程助手提升效率

阿里巴巴云原生

Liunx

数造科技连续入选中国信通院「铸基计划」,领航产业数字化新标杆!

数造万象

AI 数据分析 数据治理 Data 大模型

从传统冶金到智慧工厂:中国恩菲用IoTDB破解有色金属行业数据难题

Apache IoTDB

从手工测试到AI测试工程师,揭秘大厂20-50K高薪岗位核心技术栈

测试人

人工智能

优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言

数据追梦人

如何使用通义灵码完成PHP单元测试 - AI辅助开发教程

阿里云云效

php

华为云智能驾驶用户大会高阶智驾量产成焦点,产业链生态合作再加码

极客天地

C++ AI 通义灵码 VSCode插件安装与功能详解

阿里巴巴云原生

c++ 云计算 AI

Apache Doris & SelectDB 技术能力全面解析

SelectDB

数据库 大数据 Doris SelectDB 实时分析

鸿蒙游戏生态新纪元:500+厂商共建,3700+游戏上架华为游戏中心

最新动态

云备份技术解析:永久增量备份

天翼云开发者社区

云备份

中昊芯英亮相第十三届中国电子信息博览会,斩获创新金奖第二名

科技热闻

加速高水平研究型医院建设!以 AI 力量驱动医院科研管理效能提升

ModelWhale

人工智能 大数据 AI 医疗

近20款客服类SDK已适配鸿蒙5,覆盖电商、金融、教育、政务等行业

新消费日报

深入研究:京东商品列表API详解

tbapi

京东API接口 京东商品数据采集 京东商品列表API接口

如何使用通义灵码完成PHP单元测试 - AI辅助开发教程

阿里巴巴云原生

php

MySQL 的四种社交障碍等级

秃头小帅oi

C语言 AI 通义灵码 VSCode插件安装与功能详解

阿里巴巴云原生

C语言

chrony时间同步软件介绍

天翼云开发者社区

chrony 时间同步软件

沐曦与和鲸科技完成兼容性测试,国产GPU与国产AI开发平台的强强联合

ModelWhale

人工智能 大数据 gpu 国产大模型

关于单条数据过长insert报错问题处理

TiDB 社区干货传送门

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