AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

评论

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

微服务、DDD

chenzt

程序的机器级表示-控制

引花眠

计算机基础

计算机网络基础(十六)---传输层-可靠传输的基本原理

书旅

计算机网络 网络 协议族 网络层

视读——沟通的艺术,看入人里,看出人外(第二章)

废材姑娘

读书笔记 视觉笔记

BGP、OSPF、MPLS路由协议RFC分享

Phantasm

ARTS打卡 第11周

引花眠

ARTS 打卡计划

第十章作业

武鹏

如何让区块链技术能够更好赋能数字社会建设

CECBC

区块链 数字经济

十年一梦,小米的原罪得到救赎了吗?

脑极体

图文讲解 AQS ,一起看看 AQS 的源码……(图文较长)

程序员小航

AQS jdk源码 源码阅读 java 并发

那些不可貌相的代码规范

废材姑娘

代码质量

求刚好大于当前数组组合,Code Review最佳实践,JVM框架原理,JVM垃圾回收原理 John 易筋 ARTS 打卡 Week 12

John(易筋)

Code Review ARTS 打卡计划 JVM虚拟机原理 JVM垃圾回收原理 Array算法

ARTS 打卡(20.07.20-20.07.26)

小王同学

面试这么撩准拿offer,HashMap深度学习,扰动函数、负载因子、扩容拆分,原理和实践验证,让懂了就是真的懂!

小傅哥

Java 面试 hashmap 负载因子 扰动函数

学了那么多技术,为何依然成不了架构师

菜根老谭

架构设计原则

热潮-区块链的价值能够体现在哪些方面?

CECBC

区块链技术 标准化 应用价值

当实证资产定价遇上机器学习

分析101

人工智能 学习 金融科技 金融 资产定价

设计模式之——JDK动态代理的源码分析

诸葛小猿

动态代理 cglib 代理模式 Proxy

Java 常见的几种 OOM

hepingfly

Java OOM

深化区块链技术的应用 体现其价值产业发展良机

CECBC

区块链技术 数字经济

ARTS打卡Week 10

teoking

如何理解Java8 的函数式编程

Rayjun

Java 函数式编程

ARTS Week11

时之虫

ARTS 打卡计划

LeetCode题解:21. 合并两个有序链表,迭代,JavaScript,详细注释

Lee Chen

大前端 LeetCode

关于 Bash 的 10 个常见误解

柴锋

bash Linux DevOps Shell

吃灰的旧显示器别扔!

小匚

学习 随笔杂谈

Suricata-流的处理

Phantasm

网络安全 suricata flow

应用开发基础之-并发编程

superman

ARTS-WEEK10

一周思进

ARTS 打卡计划

Requests模块基本操作

有梦想的tester

十多位全球技术专家,为你献上近十个小时的.Net微服务介绍

newbe36524

容器 微服务 .net core netcore

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