写点什么

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

评论

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

一个虚拟世界里栽树的公司及其启示

郭华

技术 商业模式 电影

Python3 for ... else ...陷阱

王坤祥

Python Python PEP

系统不可用总结

不在调上

nginx报错worker_connections are not enough

Java联盟

nginx

“庆俞年”大战,真正受损的不是李国庆

北柯

创业 合伙人 创业者 互联网人 当当网

学习的深度 & 深度的学习

北风

学习

56张图入门操作系统——内功心法,适合所有程序员

执鸢者

大前端 操作系统

有一种自我欺骗,叫只为孩子

zhoo299

随笔杂谈 家庭

ST在keil下开发时候文件options配置的一些小技巧

良知犹存

嵌入式

一文吃透PHP进程信号处理

书旅

php Linux 信号

云原生架构的基石

soolaugust

Docker 架构 Kubernetes 容器 云原生

草脸识别,AI泡沫还是皇冠明珠?

郭华

人工智能 AI 商业 解决方案

浅谈技术管理之团队管理

Geek_37rwst

团队管理 技术管理

高效程序员的45个习惯:敏捷开发修炼之道(3)

石云升

读书笔记 敏捷开发 无限游戏

大数据技术发展(二):Hadoop 技术生态圈的发展

cristal

Java 大数据 hadoop hadoop3

SpreadJS 纯前端表格控件应用案例:集成 Odoo提升企业ERP表格功能

葡萄城技术团队

开源 SpreadJS Odoo

"工科生"的浪漫 百度大脑语言与知识技术峰会在七夕向你发出参会邀请

百度大脑

2w字 + 40张图带你参透并发编程!

苹果看辽宁体育

Java 后端 并发

大厂面试必读,JAVA进阶神书《深入理解Java虚拟机》第三版更新内容全曝光!

华章IT

JVM 虚拟机 周志明 Java虚拟机 jvm调优

Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的

程序员生活志

Flink所需组件-1

小知识点

scala 大数据 flink 流计算

搭载十代酷睿i7处理器,这台ROG冰刃4新锐拥有媲美台式游戏电脑的性能

最新动态

写代码爬取了某 Hub 资源,只为撸这个鉴黄平台!

程序员生活志

教程 Hub 资源

丐帮,少林,明教,武当!看看你数据分析的技能属于哪一派?

程序员生活志

跟我一起基于Karma搭建一个测试环境(下)

Jack Q

大前端 测试框架 Karma

四种主要的 IO 模型

一盐难进

Netty

吃透Laravel的Ioc容器

书旅

laravel 容器 ioc

nginx 报错 accept4 () failed (24:Too many open files)

Java联盟

nginx

《精益创业》摘要

孙苏勇

书摘 精益创业

为什么一旦自己创业了,很难再回到公司去坐班?

北柯

创业 互联网 创业心态 上班 上班族

错误的存储方案正吞噬你的成本

jinjin

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