JVM热身工具HotTub有助于大数据应用性能提升

java虚拟机(JVM)是现代分布式计算的一个重要组成部分。它是大数据的应用程序 Spark, HDFS, Cassandra和 Hive的平台 。而JVM提供了“一次编写,到处运行”平台独立性是有代价的。JVM需要时间“热身”,也就是加载类,解释字节码等等。对于一个长期运行的Tomcat服务器这段热身时间可能没有多大关系,但大数据的工作通常是短暂的。因此并行化经常用来加速JVM预热时间。

David Lion和他的同事们研究了JVM的性能,在本月早些时候第十二届USENIX研讨会上提出了在操作系统设计与实现的。虽然许多研究是提高JVM的运行时性能,但很少有人研究JVM的启动时间。优化垃圾收集、调度、计算重复数据删除有助于提高性能,但最大的开销基本上保持不变。

HDFS系统的一千兆字节读取是一个I/O密集型的操作,花费大约三分之一的时间在JVM预热上。当读取的尺寸下降到1兆字节,热身时间占超过60%的执行。这对很多用户有影响;一个Cloudera的研究表明,最真实世界的Hadoop作业是读取不到数据,他们的许多客户读取操作大小是小于1兆字节。作业执行要开销一半或一半以上的时间,这是不令人满意的情况,特别是当使用基于时间的计费模式的基础设施,它变得特别讨厌。

为了解决这个性能开销,Lion和他的同事开发了一种新的JVM叫hottub。使用hottub,一千兆字节的Hive查询表现最差的速度比使用OpenJDK JVM提高1.10倍。其他Hive和Spark的查询大小不等都有1.5-2倍范围的改进。最令人印象深刻的性能提高是,使用hottub的1 MBHDFS读取速度比其他JVM有三十倍的提升。

HotTub是维持一个已经热身的JVM池,当HotTub的 java 执行入口被调用时,它试图连接之前已经加载的JVM. 只要没有热身JVM空闲存在,它就创建新的。应用结束后,HotTub JVM关闭任何文件描述器,重置状态,同时维持类和编译后的代码, 后续工作就免于重新启动新的JVM开销了。

即使有一些缺陷,hottub看起来像一个伟大的工具。hottub是开源的、源代码是可用的。公共云基础设施的大规模用户直接受益,减少了运行时间,节约了成本。


JVM Boost Shows Warm Java is Better than Cold