BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

HotSpot JVM的任务控制和Flight Recorder

| 作者 Fabian Lange 关注 0 他的粉丝 ,译者 孙镜涛 关注 2 他的粉丝 发布于 2013年10月17日. 估计阅读时间: 7 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

从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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT