jClarity 发布 Censum 3.0

  • Abraham Marín Pérez
  • 任美芒

2016 年 3 月 7 日

话题:JavaJVM性能调优语言 & 开发架构AI

近日,jClarity 公司发布了旗下的垃圾回收分析工具 Censum 的 3.0 版本。新版本的主要特性包括安全点 (Safepoint) 日志分析,图表展示 G1 垃圾收集器行为以及分析什么时候应用程序使用过多操作系统活动。

新的 G1 收集器注定会成为焦点,因为 G1 将成为服务器配置 Java 9 中默认的垃圾收集器,安全点的日志分析可以帮助用户更好地进行垃圾收集调优。安全点是一种机制,它通过 JVM 彻底停止应用程序,以便能够执行特定的维护任务。这样,一个全面的垃圾收集 (也称为 Stop The World or STW ) 将成为促使安全点的主要原因之一,这就是垃圾收集调优为何如此受关注的原因。然而,当用户逐渐了解如何避免由 GC 引起的停顿,他们同时也需要考虑其他原因引起的安全点。

虽然有一些进展,但是性能分析和调优对于大多数用户来说仍是一个晦涩的话题。因此,InfoQ 采访了 jClarity 的 CTO Kirk Pepperdine 和 CEO Martijn Verburg,以便了解更多性能的技巧和知识,以及 Censum 如何帮助区分这两者。

InfoQ:可以寻求帮助的资源不是很多,这是性能调优方面存在的一个问题,这也是你们创建 Censum 的原因吗?是为了提供更多这方面的资源么?

Kirk Pepperdine:事实上,在 Censum 甚至早期的 jClarity 工作时,它源于我对应用程序性能中内存管理重要性处理工具的失望。在 Sun 有一些想法构建一个框架来分析日志并创建一些图表,但结果证明只能产生一些数据点。我认为这是不够的,并得出结论认为,我要得到我所需要的,唯一的方式就是自己创建它。所以,最初,Censum 只是一个我为我自己创建的工具。我从来没有想过做其他任何事情,直到我遇到了 Ben Evans 和 Martijn Verburg。

InfoQ:这也是你们创建 Friends of jClarity 通讯录的原因吗?

Martijn Verburg:当然。Friends of jClarity 开始创建一个社区,在这里来自世界各地的性能调优专家在一个空间,帮助在性能调优方面有问题的工程师。有一个友好和开放的列表,“没有问题是愚蠢的”,在这里有一些有经验的专家提供意见。

性能调优对于大多数人是暗黑艺术,而且在博客和网站有大量的民间传说和不正确的信息,如堆栈溢出。Friends of jClarity 拥有多方面领先的性能调优专家和实际工作在 Java/JVM 核心技术的工程师。列表中给出的答案和建议往往要比其他地方更准确、正确、时效性更强。

InfoQ:谁可以或者说谁应该加入 Friends of jClarity。

Martijn Verburg:任何人都可以点击Apply to join group按钮加入。如果任何人有任何问题可以发邮件给我们支持团队:在 jclarity .com 的支持。

InfoQ:对于性能调优领域的新人,很容易认为使应用程序更快的是 CPU 周期,但是在 Censum 看起来更多的是内存管理。你认为在性能调优时,还有其他什么方面的误解比较普遍。

Kirk Pepperdine:性能调优是了解你有什么资源,哪些资源使用频率较低或过度使用。一旦你了解你的核心资源 (CPU,内存,磁盘,网络,JVM 线程等),以及对于这些资源输入输出定时测量,你可以很快找出瓶颈在哪,如何减少这种依赖。

应用性能是 CPU 限制,这是一个普遍的误解。事实上,对很多应用都是特殊的,无论是 Java,C# 或 CPU 限制。我们见过不少客户花大量的钱买更大或更好的 CPU,却没有看到性能的改善。

InfoQ:总是有很多人谈论性能,解决方式不同:有的试图重写代码,有的在 GC 标志上进行优化,你推荐的第一步是什么?什么时候需要开始使用 Censum?

Kirk Pepperdine:如果你没有确定问题的根源是什么,很难知道怎么调优。Censum 是我们用来确定问题根本原因的工具之一。一旦你确定了根本原因,如何调优会很明显。有些问题可以通过修改几个参数来解决,但在我们的经验中大部分需要通过重构组件来解决。之后,Censum 可以帮助你做出调优的决定,确保 GC 不再出现问题。

InfoQ:当谈到性能,很多的谈话是围绕软件,但明显的硬件起着非常重要的作用。Censum 是否会给你提示,你可能需要更换硬件(如更快的 CPU,更多的内存,等等)?

Kirk Pepperdine:是的,Censum 可以帮你确定你的应用程序需要多少硬件从一个内存管理点平稳运行。例如,Censum 根据你设置的大小进行估计,这是常驻 Java 堆的总数据量。这允许你设置最大的堆大小,反过来又指导你在管理上需要多少真正的内存。

另一个典型的问题是分配率(在一段时间内分配的内存量)。这些天 CPU 和内存子系统很快。你可以配置千兆字节每秒的数据对性能没有明显的影响。但是,如果你同一时间分配几个字节,这将是一个问题。因为大多数 Java 应用程序做的正是这个(同一时间分配几个字节),在分配成为主要性能瓶颈前你并不需要很高的分配率。这是可执行剖析器(execution profilers)可能错过的一个问题,即使被捕获了,往往会以一个混乱的方式暴露问题。Censum 会告诉你分配率是多少,你可以使用这些信息来选择一个分配器,或者至少是更好地理解执行剖析器发出的信息。它只是简单地帮助你把系统可能发给你的信号关系理清。反过来,你会得到更好的可扩展性,这意味着你可以用更少的硬件来处理更多的负载。举个例子,我们的一个客户用 Censum 减少硬件需求,一个特定的情况下,服务器从 80 台减少到 4 台。

InfoQ:Censum 提供了大量的图表和指标,能告诉我们你们定义这些图表的过程吗?你们如何决定哪些是有用的图表?

Martijn Verburg:Kirk 自他第一次接触 Java 就开始进行垃圾收集算法调优,所以他有很多的灵感。当然,其他的团队成员也会提出建议。然而,一个主要的灵感来源于回答客户的问题:这个想法是创建新的图表,为他们提供直观的答案。

例如,客户最近想知道应用中一些莫名其妙的 Full GCs 从哪里来。我们进行挖掘并意识到我们忽略了极少数情况下造成 Full GCs 的 PermGen 或 Metaspace 溢出源于什么地方。所以 Kirk 想出了一些新的图表展示这些事件的发生,并建立最终用户易于理解的分析报告,在线上表示"Go and make your PermGen size X"。

InfoQ:G1 regionalises 内存管理,而不是传统的 generational 内存,适应 Censum 有多难?

Martijn Verburg:Censum 通过 JVM 生成的日志文件读取 GC 数据,它不直接接触 JVM。副作用是,访问新的数据很容易!当试图分析这些新的数据时,问题就来了。如果日志格式没有定义或标准化,并且可以被 Hotspot 工程师修改的非常少时,这是非常困难的。

经过几个月的工作以及分析整理,我们能够通过 Censum 为 G1 创建内部数据模型。如果对内存池模型和 GC 行为有一个明确的结构和接口,这会变得非常容易。为 G1 创建图表也会非常容易,因为我们可以利用大量的已经为其他收集者创建的基础设施。

建立有意义的分析是最难的部分。在 G1 没有太多的研究成果时,尽管人们开始使用并产生真正的生产系统中的信息,但我们不能像其他的收集者一样记录相同的日志主体。这意味着我们没有尽可能多的数据,以确定哪些是有价值的,哪些不是。

在 G1 分析方面,我们还有很多工作要做,但至少我们现在能够提醒用户对表现不佳的应用程序或危险行为模式进行收集。

InfoQ:Censum 现在支持安全点日志,这意味着非 GC STW 停顿可以被分析。鉴于 GC 停顿是分析的主要目标,我们应该怎样看待和思考非 GC 停顿?

Kirk Pepperdine:垃圾收集确实是应用程序线程 JVM 安全点的原因之一。还有许多其他的维护措施,也将让你的应用程序更快。偏向锁可能是最常见的一个,但不幸的是,我们不能确切知道,因为我们没有大量的数据,更糟的是,我猜测很少有人知道得到这个数据的可能性,因此,甚至更少的人可以收集。现在,Censum 将这个数据可视化,我们希望改变这一状况,让人们知道他们可以如何减缓 safepointing 率。

InfoQ:Censum 下一步计划是什么?

Martijn Verburg:我们正在建立一个流的版本,可以监视多个 JVM 实时提供同样的详细指标和分析;而且,利用实时数据可以对要发生的危险事件进行警报,甚至预测可能发生的事件,类似于“在未来 2 分钟你的应用有 95% 的可能出现内存不足错误(OOME)。”这样的警报信息。

Censum 也将与我们的 Illuminate 产品集成。总之,Illuminate 分析应用程序并指示什么类型的问题最影响性能,这是内存 / GC 相关的或其他的东西(例如磁盘 I / O,线程死锁,线程饥饿,等待外部系统响应)。如果问题是有关 GC,那么你就可以深入了解 Censum 的功能特性,并获得如何解决问题的一些建议。

Martijn Verburg 是 jClarity 联合创始人兼 CEO,jClarity 是一个 Java/JVM 性能优化公司,提供了业界领先的分析工具,通过机器学习驱动。Martijn Verburg 是软件方法和技术团队优化的权威专家,拥有多年运行大型分布式项目的经验。他在大型会议做过演讲,他乐于在 The Diabolical Developer 挑战行业现状。他是伦敦 java 社区 (London Java Community) 的共同领导者,领导全球人致力于采用 Java 标准的 Adopt a JSR 和 Adopt OpenJDK 项目。在 2012 年的贡献中,他被公认为 Java 冠军 (Java Champion)。

Kirk Pepperdine 是 jClarity 的联合创始人兼 CTO。他致力于高性能和分布式计算近 20 年。起初,Kirk 主要从事架构、开发、Cray 公司以及其他高性能计算平台上运行的应用程序调优。现在他专注于 Java,从事项目生命周期各个阶段各方面的性能和调优工作。为了表彰他对 Java 社区的杰出贡献,2006 年 Kirk 被评为 Java 冠军。

查看英文原文:jClarity Releases Censum 3.0


感谢张龙对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

JavaJVM性能调优语言 & 开发架构AI