横跨数据中心的 JVM 和 Twitter 的 JDK

  • Dylan Raithel
  • 薛命灯

2016 年 11 月 15 日

话题:JavaJVM语言 & 开发AI

在 2016 旧金山 QConf 大会的解决方案进展情况报告会上,Twitter 为我们呈现了一些演讲。昨天,Twitter 的 JVM 团队对外公布他们正在开发、发布和维护一个 JDK 分支版本。这个 JDK 是 OpenJDK 的分支,在 Twitter 内部发行,目前可以支持 OSX 和 Linux,每个月发布一次,如果有紧急版本会缩短发布时间。来自 Twitter 的John Coomes告诉我们,在如何对 OpenJDK 的特性进行趋异演化方面,Twitter 所做的跟 Oracle-JDK 有些类似。当被问及 Twitter 是如何决定对上游 OpenJDK 的变更进行合并时,Coomes 回答说,这个取决于要发布的特性,况且他们并不打算维护一个跟 OpenJDK 主干分支紧密耦合的版本。

Twitter-JDK 带来一些新的特性,比如经过扩展的堆内存分析、异步垃圾回收日志、二进制日志框架Contrail、中间代G1、更丰富的 API 和命令行参数、性能改进以及缺陷修复。Twitter-JDK 的一些改进特性也会被上游的 OpenJDK 所采用。

Coomes 提到了在 OpenJDK 的 JVM 里存在的一些问题,特别是 GC 的长时间停顿问题。一种改进的措施是把 I/O 密集和对延迟敏感的任务分开执行。不过 Twitter 有成千上万个运行在 JVM 上的服务,对它们进行分离是个很枯燥的工作。我们可以在达到安全点时关闭 JVM 的 I/O,不过这样会降低对 JVM 的监控能力。随着基于 Python 的服务逐渐向基于 JVM 的服务迁移,Twitter 的 JVM 服务数量只增不减。Twitter 正在通过实现异步 GC 日志和jvmstat来解决这些挑战所带来的问题。这样,GC 停顿就不会再阻塞 I/O。Coomes 说之后将会发布 Contrail,Contrail 包含了一个 JIT 编译器和运行时,支持堆栈跟踪,可以作为实现异步 GC 日志的支持框架。Twitter-JDK 实现了贝叶斯优化算法,这个技术借鉴自机器学习,让 JVM 可以持续高效地学习模糊成本函数,可以更快地找到更优的处理路径。

被问及 Twitter-JDK 的 VM 调优参数时,Coomes 说大概有 30 个参数可以用来对 VM 进行调优。用来衡量 VM 性能的成本函数就是指在 GC 期间每秒可以处理的请求数。Twitter 在测试环境使用这 30 个参数对新 VM 进行了 70 轮 GC 测试,结果在性能上有 182% 的提升。未来的工作将包括对 VM 进行压力测试或极限测试、更长的试验期、基于 Mesos 的并发试验以及及早探测并结束无效试验的能力。

查看英文原文:JVMs Across the Data Center and Twitter's JDK

JavaJVM语言 & 开发AI