写点什么

HotSpot JVM 的任务控制和 Flight Recorder

2013 年 10 月 16 日

从 Java 7 Update 40 之后,任务控制和 Flight Recorder 就将和 JDK 一起提供,正如 InfoQ 在介绍它发布的新闻中所描述的那样。任务控制的出发点是监控、管理和排错,而 Flight Recorder 则是收集和评估性能数据的设施。这两个工具在 JRockit 中都已经存在,现在最终被移植到了 HotSpot 上,早在 2010 年 Mark Reinhold 发布的网络广播 中就有此暗示,而在 JavaOne 2011 上任务控制团队的领导者 Marcus 最终宣布了这一决定。在今年的 JavaOne 大会期间,Marcus Hirt 和 Staffan Larsen 在多个会议上介绍了它们的工作原理和利用方式。任务控制的版本号是 5.2.0,但是因为它实际上是针对 HotSpot 的第一个版本,所以 Marcus Hirt 喜欢称之为 1.0.0 版。

任务控制

任务控制提供的功能几乎和 JVisual VM 完全相同。这两个工具都能够连接到本地或者远程 Java 进程收集 JMX 数据。任务控制能够通过 Java 发现协议(Java Discovery Protocol)自动地发现远程运行的 JVM。为了使用该功能 JVM 需要通过下面的参数启动:-Dcom.sun.management.jmxremote.autodiscovery=true -Dcom.sun.management.jdp.name=JVM_Name。

和 JVisual VM 相似的是,任务控制也有一个插件机制,能够进行定制化。但是与 VisualVM 不同的是,任务控制还能够在收集的数据上创建新的视图。现在能够使用的两个实验性的插件是 JOverflow 堆分析器(查找低效的集合使用)和 DTrace 记录器(关联 DTrace 配置文件)。任务控制拥有一个 JMX 浏览器作为它核心功能的一部分,同时提供了稍微更加强大的功能。例如,线程监控能够提供每一个线程的分配信息以及与堆栈跟踪相关的信息。因为任务控制是基于 Eclipse 平台的,所以它不仅能够作为 JDK 中的独立工具使用,还能够作为 Eclipse 插件从 Oracle 任务控制更新网站上获取。

Flight Recorder

想要在 JVM 之外收集调试数据、特别是性能数据的工具需要实现 JVMPI/JVMTI 接口。虽然大部分分析工具发展的非常良好,但是让它们能够在产品中低消耗地运行依然是非常困难的。

Flight Recorder 直接在 JVM 中实现了它自己的基于事件的监控接口,所以能够以最小的开销提供 CPU 时间或者对象分配分析这样的功能。例如,这个新接口允许采取线程的样本但不需要它们在还原点上,降低了开销和测量的偏差。只有少量使用字节码检测的事件对运行的代码有影响。大部分捕获技术是新的,第三方无法使用。Flight Recorder 在 JVM 本地记录数据,但是是记录在堆外(off-heap),因此它并不会影响内存特性和垃圾收集。当它被配置成持久化数据的时候,它会周期性地倾倒(dump)到一个文件中。

收集的数据主要包含 4 种类型的事件:“瞬间(instant_)”,在事件发生时进行记录;“可请求的(requestable_)”,它们会被轮循;“持续(duration_)”,表示一个时间间隔的度量;“定时的(timed_)”,它们和“持续”一样,但是对过滤数据应用了阀值。有两个预定义的配置:“连续性(continuous_)_”,它的目的是始终运行;“剖析(profiling)”,它会收集更多的数据以便进行短期分析。但是无论如何开销始终都非常低,除非明确地声明一个事件。

除了 JVM 生成的事件之外,还鼓励框架和应用程序服务器提供自己的事件。目前并不支持接口,但是 Weblogic 和 Glassfish 已经提供了事件,它们基本上成为了事实上的接口。Marcus Hirt 在他的博客文章“使用 (非常不支持的) Java Flight Recorder API ”中介绍了如何使用API。基本的步骤是扩展合适的Event 类,通过添加注解表明值,然后从事件产生的代码中调用它。自定义的事件和其他事件并没有什么不同,也能够使用、创建仪表盘并随着其他的事件一起绘制。该版本包含的其他重要功能的细节信息可以从 Marcus Hirt 的另一篇博客中找到。

许可

为了使用 Flight Recorder,服务器 VM 需要使用下面的参数启动:-XX:+UnlockCommercialFeatures -XX:+FlightRecorder 。这已经表明这些新功能需要一个许可。但是并没有进行技术性的检查,所以许可文件并不是必须的。实际上许可是一个契约性的协议,它需要 Java SE Advanced 或者 Java SE Suite,根据 Oracle 的价格表在产品系统中它的售价是每个处理器 5k/15k 美元。测试或者开发系统并不需要许可,但是依然需要 UnlockCommercialFeatures 标记。任务控制本身是否需要一个许可并不明确。文档中暗示了它也能在 OpenJDK VM 上免费使用,只要任务控制不要在需要每个处理器许可的产品系统上运行即可。希望 Oracle 能够澄清这个状况。

未来

由于任务控制和 Flight Recorder 现在在 HotSpot 中,所以开发的焦点将会是如何添加插件从而能够自动地指出性能问题,例如内存泄漏检测器(Memory Leak Detector)和构建启发式的工具。之前已经讨论过 JConsole 和 VisualVM 的未来,它们与任务控制有一定的重叠。它们很有可能会被保留,因为它们是 OpenJDK 的一部分,而任务控制并不是。如果 Oracle 采取的策略和 VisualVM 替代 JConsole 时的策略相同,那么 JConsole 和 JVisual VM 很有可能会保留下来,但是开发的焦点将会放在任务控制上。Jack Shirazi 在他的 Java 性能调教简讯中推测 JConsole 将会退役,而 Kirk Pepperdine 则评论说他相信任务控制将会转移到 Netbeans 平台,类似于 VisualVM。Marcus Hirt 告诉 InfoQ 说没有这样的计划。

查看英文原文 Mission Control and Flight Recorder on HotSpot JVM

2013 年 10 月 16 日 10:253078
用户头像

发布了 321 篇内容, 共 102.2 次阅读, 收获喜欢 6 次。

关注

评论

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

LeetCode题解:225. 用队列实现栈,两个队列,压入 -O(1), 弹出 -O(n),JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

合约跟单app,永续合约交易所带单交易软件

13823153121

边缘计算,如何啃下集群管理这块硬骨头?

博云技术社区

云计算 容器 边缘计算 PaaS 博云

深度解析!--阿里开源分布式事务框架Seata

攀岩飞鱼

分布式 分布式事务 微服务 分布式锁 Seate

Redis 哨兵模式

是老郭啊

redis redis哨兵模式 redis哨兵 redis哨兵集群

协同新机遇:让研发敏捷起来

人称T客

未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~

程序员内点事

Java RabbitMQ mqtt

Polkadot初识,不止于跨链

QTech

polkadot 跨链

第4周总结

Vincent

极客时间 极客大学

教师节特别活动:第四范式多项自研技术及其应用实践分享

天枢数智运营

人工智能 推荐系统 第四范式 个性化推荐

云图说 | GPU共享型AI容器,让AI开发更普及

华为云开发者社区

AI 容器

【万字长文】探讨可信构架之道

华为云开发者社区

架构 服务端

大厂运维必备技能:PB级数据仓库性能调优

华为云开发者社区

架构 数据

使用开源软件构建工业互联网的平台

刘旭东

工业互联网 Odoo thingsboard

Docker 容器编排利器 Docker Compose

哈喽沃德先生

Docker 容器 微服务 Docker-compose 容器化

The Go Blog-Article index

卓丁

物联网通信技术最全科普!你一定要了解的NB-IoT

华为云开发者社区

物联网

20张图,大学四年都没整明白的操作系统就这么学会了

小Q

Java 程序员 架构 操作系统

新基建夯实粤港澳大湾区高质量发展基础

CECBC区块链专委会

区块链 人工智能 大数据

传统产业数字化转型的思考与建议

CECBC区块链专委会

经济转型 企业经济

CSS常用样式——绘制单(双)箭头的多种方法(2)

程序员学院

CSS html 程序员

呕心沥血,整理200+最新面试题,面试之前看一下,事半功倍

小Q

Java 学习 程序员 架构 面试

通证与通证经济你真的理解吗

CECBC区块链专委会

区块链 通证经济

媒体电视台跟进,船长梁晓玲平台拉人头卖课引起多方报道!

成周

模板方法模式——看看 JDK 和 Spring 是如何优雅复用代码的

Java架构师迁哥

阿里年薪百万的P7架构师简历都长什么样?他们都是怎么学习的?

周老师

Java 编程 程序员 架构 面试

MySQL高性能架构设计原则

李浩宇/Alex

当心这些“坑”!阿里云服务器部署前后端分离项目

麦叔

nginx 前后端分离 跨域

为什么我的缓存设置在chrome中不生效

书虫

chrome 缓存 浏览器 HTTP

去中心化交易所搭建,虚拟币去中心化交易系统

13823153121

交易所开发

XSKY ClickHouse如何实现存算分离

XSKY融合存储

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

HotSpot JVM的任务控制和Flight Recorder-InfoQ