AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

评论

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

👑【Hystrix技术专题】原理和特性介绍

码界西柚

Hystrix spring-cloud 熔断器 6月日更

负载均衡算法之一 - 以 Golang 方式

hedzr

load-balancing weighted round-robin consistent-hashing

微服务的简介和技术栈

xcbeyond

微服务 发展史 6月日更

网易云信大规模聊天室系统架构解析

网易云信

聊天室 IM

从金融街往事到全场景智慧金融未来

白洞计划

5分钟速读之Rust权威指南(二十二)迭代器

wzx

rust

尽情阅读,技术进阶,详解mmap的原理

奔着腾讯去

c++ 内存管理 Mmap 虚拟内存 共享内存

Flask-Limiter详细使用说明

行者AI

flask

发布60分钟!霸榜Github的阿里面试指导小册,啃透涨薪10k

Java架构师迁哥

Python分类预测模型

Qien Z.

Python 预测模型 6月日更

阿里巴巴新产“Java架构核心宝典”,全是流行技术,限时开放

Java 程序员 架构 面试

如何针对美工与设计师的Maya工具进行版本控制

龙智—DevSecOps解决方案

小伙伴们在催更Spring系列,于是我写下了这篇注解汇总!!

冰河

spring 程序员 架构师 aop ioc

Seata 新特性,APM 支持 SkyWalking

阿里巴巴云原生

运维 云原生

智慧新发展:打造更富动感的智慧园区3D可视化决方案!

一只数据鲸鱼

数据可视化 智慧城市 智慧园区 三维可视化

数字经济下的数据库发展以及应用

容光

别闹,那个在加密世界拿着长枪的库币

猫Buboo

区块链 区块链+ 加密资产

详解 SQL 的集合运算

悟空聊架构

数据库 sql 6月日更 集合运算

解决权限管控难题,保障数据安全——CloudQuery在证券行业的实践

BinTools图尔兹

数据库 高可用 脱敏 数据库管理 权限管理

git版本升级

阿呆

前端 JS 之 AJAX 简介及使用

编程三昧

JavaScript ajax 大前端 异步请求

谁是项目的负责人?

escray

学习 极客时间 朱赟的技术管理课 6月日更

阿里P8工作10年,离职时发现只剩这份《Java架构速成》笔记了

Java架构师迁哥

基于WebRTC的1对1通话实战(一)环境搭建

IT酷盖

音视频 WebRTC

夯实区块链产业发展根基是当务之急 标准体系、知识产权是国际竞争角力之焦点

CECBC

现代分布式架构设计原则-可观测性

余先生

微服务 监控 日志 可观测性 链路追踪

企业云迁移暗藏风险,1人如何扛起性能测试大旗?

TakinTalks稳定性社区

高可用 电商 全链路压测 性能压测 云迁移

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

Java 程序员 架构 面试

从货币流动性角度看区块链流动性发展

CECBC

基于开源引擎打造自主可控服务体系

张亮

大数据 开源 To B业务

CSS技巧 | 优雅的处理文本溢出截断

devpoint

CSS 6月日更

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