写点什么

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

评论

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

VSCode 中,TS 提示 ”无法找到 *.vue 声明文件“ 的解决方案

编程三昧

vscode Vue3 ts 9月日更

秋招如何抱佛脚?2021最新大厂Java面试真题合集(附权威答案)

Java 架构 面试 程序人生 编程语言

2021年最新整理, C++ 学习资料,含C++ 11 / 14 / 17 / 20 / 23 新特性、入门教程、推荐书籍、优质文章、学习笔记、教学视频等

奔着腾讯去

c++

[外文资源]最好的 Golang 博客

baiyutang

golang 9月日更

Python代码阅读(第30篇):找到列表中的奇偶异常项

Felix

Python 编程 Code Programing 阅读代码

乌镇回溯 | 构建网络空间命运共同体,旺链科技做了哪些?

旺链科技

数字经济 产业区块链 世界互联网大会

P8整理的OpenStack构架,希望能帮助到你

hanaper

java 虚拟机 GC :G1配置参数

风翱

GC 9月日更

linux之登录式shell和非登录式shell

入门小站

Linux

在线黑客帝国文字效果生成工具

入门小站

工具

万亿养老市场如何抢占商机?云巢智慧康养物联网加速器,三招化解ISV痛点!

华为云开发者联盟

物联网 华为云 iotda 沃土云创计划 智慧康养

顺丰对供应链+区块链应用的思考与规划

CECBC

android逆向之root方式注入apk

轻口味

android 9月日更

膜拜!不愧是阿里大牛总结的Java10W字面经,Github访问量已破百万

Java 程序员 架构 面试 计算机

Prometheus 2.30.0 新特性

耳东@Erdong

release Prometheus 9月日更

太有用,Alibaba架构师十年心血熬成的435网络协议文档

程序员 编程语言 网络协议 TCP/IP

深入浅出Redis宝典,阿里架构师10年经验汇总,PDF免费分享

Java redis 架构

网站攻击到提权的全部过程

网络安全学海

黑客 网络安全 信息安全 WEB安全 漏洞分析

网络攻防学习笔记 Day150

穿过生命散发芬芳

9月日更 网络流量分析

阿里云天池赛题解析——深度学习篇重磅发布!

博文视点Broadview

详解html5新增的标签与css3中伪类和伪元素

你好bk

html5 css3 大前端 基础技能

拒绝裸奔,为 Elasticsearch 设置账号密码(qbit)

qbit

https 安全 Kibana

netty系列之:分离websocket处理器

程序那些事

Java 架构 Netty 程序那些事

扒一扒面向对象编程的另一面

华为云开发者联盟

编程 面向对象 对象 对象编程

月度发布 | 极狐GitLab14.3升级40+新功能!

极狐GitLab

「绝密档案」“爆料”完整秒杀架构的设计到技术关键点的“情报信息”

码界西柚

后端 秒杀系统 秒杀架构 秒杀架构设计 引航计划

分布式系统都要遵守的CAP

卢卡多多

CAP 9月日更

13个VSCode使用技巧,开启高效的开发模式

华为云开发者联盟

vscode 日志 开发 插件 Git存储库

被客户像小学生一样训话

boshi

创业

多指标异常检测方法综述

云智慧AIOps社区

AIOPS 异常检测 技术学习 智能运维 指标

基于虹软SDK,适配Camera1、Camera2、CameraX,实现人脸识别(Android)

小驰笔记

android 音视频 人脸识别 引航计划

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