open jdk性能与稳定性测试比较(转载)

由于oracle jdk从jdk8u201以后就不提供免费下载了,因此最近在看openjdk的分支实现,网上搜了下,有下列选择和比较(咱们目前主要在跑的是open jdk,很多人推荐的zulu openjdk尚未跑过)。oracle

JVM有许多不一样的选择。哪一个最好用?比较几种JVM性能; Zulu OpenJDK,OpenJDK,Oracle JDK,GraalVM CE。负载均衡

在这篇博客中,我将描述我建立的用于同时在不一样JVM上执行测试的设置。我还研究了资源隔离的影响(为进程分配特定的CPU和内存)。这种影响能够忽略不计。个人测试应用程序由一个反应性(非阻塞)Spring Boot REST应用程序组成,我使用Prometheus轮询JVM和Grafana进行可视化。除SoapUI外,一切都在Docker容器中运行。性能

 

使用了如下版本:测试

 

  • GraalVM CE rc9 (8u192)
  • OpenJDK 8u191
  • Zulu 8u192
  • Oracle JDK 8u181

 

CPU使用率:进程

GraalVM在测试期间整体CPU使用率最高。Oracle JDK的CPU使用率最低。内存

 

响应时间:资源

总体GraalVM的响应时间最短,OpenJDK最好,紧随Oracle JDK和Zulu。平均而言,OpenJDK和GraalVM之间的差别约为30%。博客

 

垃圾收集:编译

有趣的是,GraalVM加载了比其余JDK更多的类。OpenJDK加载最少的类。GraalVM和OpenJDK之间的差别大约是25%。我尚未肯定这是不是GraalVM的固定数量的额外类开销,或者它是否与所使用的类的数量成比例,这是一个固定的百分比。这些额外的类可能致使垃圾收集期间的延迟(尽管这种相关性可能不必定是因果关系)。GraalVM更长GC暂停时间。class

 

内存使用状况:

OpenJDK JVM使用大部份内存。GraalVM和Zulu的垃圾收集行为彷佛类似,但GraalVM具备更高的基本内存使用率。Oracle JDK彷佛不那么频繁地进行垃圾收集。在查看平均值时,OpenJDK JVM使用的内存最多,而Zulu使用的内存最少。在较长时间内查看缩小的图形时,Oracle JDK和OpenJDK的行为看起来不稳定,而且可能会达到相对较高的值,而Zulu和GraalVM看起来更稳定。

 

总结:

使用SOAP UI进行了负载测试,其中一个响应式Spring Boot REST应用程序在循环haproxy负载均衡器后面的4个不一样JVM上运行。我每隔5秒使用Prometheus轮询JVM实例(使用Micrometer生成数据),并使用Grafana和Prometheus来显示数据。结果代表GraalVM不适合做为OpenJDK的替代品,由于它表现更差,使用更多资源,加载更多类并在垃圾收集中花费更多时间。

 

  • GraalVM为同一个应用程序加载更多类
  • GraalVM致使应用程序的响应时间最慢
  • GraalVM使用大多数CPU(以实现最慢的响应时间)
  • GraalVM使用大部分时间进行垃圾收集
  • Zulu OpenJDK使用比较JVM的最少内存。与Oracle JDK和OpenJDK相比,Zulu OpenJDK和GraalVM的内存使用更稳定。

固然,因为GraalVM相对较新,Micrometer提供的指标可能没法正确显示实际吞吐量和资源使用状况。也多是个人设置有负责致使这种差别。我试图经过查看不一样状况下的指标来排除第二个问题。

若是您想使用GraalVM的多语言功能,固然其余JVM不提供合适的替代方案。GraalVM也提供了我没有测试的本机编译选项(我在同一个JAR上执行了测试)。此功能可能会大大提升性能。

 

https://www.jdon.com/50843

https://cn.azul.com/downloads/zulu/

相关文章
相关标签/搜索