因为oracle jdk从jdk8u201之后就不提供免费下载了,所以最近在看openjdk的分支实现,网上搜了下,有下列选择和比较(我们目前主要在跑的是open jdk,不少人推荐的zulu openjdk还没有跑过)。

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暂停时间。

内存使用情况:

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/

open jdk性能与稳定性测试比较(转载)的更多相关文章

  1. DBCP,C3P0,Tomcat_JDBC 性能及稳定性测试

    1.测试环境: 硬件环境: 数据库服务器:2U*8核 8G内存 测试服务器:   2U*8核 6G内存 软件环境: jdk: 1.6.29 mysql: 5.0.77 mysql_driver: my ...

  2. [转载]Linux 性能监控、测试、优化工具

    Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的.简单的小工具.系统性能专家 Brendan D. Gregg 在最近的 LinuxCon NA 2014 ...

  3. Android-monkey稳定性测试(多台设备同时进行)

                                       1.目的(原创文章,转载请注明出处-) 主要为指引开展android平台应用的稳定性测试,尽可能地在应用发布前发现crash及an ...

  4. APP测试(转载)

    (1) 非功能测试 app测试的一个重要方面是app的非功能需求.移动app在推出市场或进行进一步开发前,测试人员有一定的职责做该类需求的跟踪工作. 早期开发阶段要进行的第一个测试应该是实用性测试.通 ...

  5. DBCP,C3P0,Tomcat_JDBC 性能及稳定性測试

    原创文章,转载请指明出处:http://aub.iteye.com/blog/1404219, 尊重他人即尊重自己 DBCP,C3P0,Tomcat_JDBC 性能及稳定性測试 1.測试环境: 硬件环 ...

  6. Android客户端稳定性测试——Monkey

    修改时间 修改内容 修改人 2016.6.20 创建 刘永志 2016.6.29 完成 刘永志 Monkey简介: Android SDK自带的命令行测试工具,向设备发送伪随机事件流,对应用程序进行进 ...

  7. app测试--稳定性测试

    稳定性测试的概念有2种, 一, 稳定性测试,对应于异常性测试,即发生异常情况时,系统如何反应的测试.包含: 1 交互性测试,被打扰的情况,如来电,短信,低电量等.这些其实在上章的功能测试中有提到. 2 ...

  8. SolrCloud的搭建与稳定性测试

    转载请注明出处:http://www.cnblogs.com/wubdut/p/7573738.html 一.集群搭建 1. zookeeper搭建(版本:3.4) 1.1 zoo.cfg配置文件: ...

  9. 移动性能测试 | 持续集成中的 Android 稳定性测试

    前言 谈到Android稳定测试,大多数会联想到使用monkey工具来做测试.google官方提供了monkey工具,可以很快速点击被应用,之前我有一篇帖子提到了monkey工具的使用,详见: htt ...

随机推荐

  1. Android自动化测试探索(二)常用自动化工具

    Android常用自动化工具 ADB - 是Google提供的为Android编写UI测试用例的自动化工具, Android开发/测试人员不可替代的强大工具 uiautomator - 是Google ...

  2. Flask之flask-sqlalchemy

    接下来基于这个Flask项目,我们要加入Flask-SQLAlchemy让项目变得生动起来 1.加入Flask-SQLAlchemy第三方组件 from flask import Flask # 导入 ...

  3. python之while循环用法举例,break与continue的区别,格式化输出及运算符

    一.while循环的基本结构 while 条件: 代码块(循环体) else: 当上面的条件为假. 才会执行 执行顺序:判断条件是否为真. 如果真. 执行循环体. 然后再次判断条件....直到循环条件 ...

  4. php初识2

    php概述 什么是php,PHP语言的优势,PHP5的新特性,PHP的发展趋势,PHP的应用领域. PHP是超文本预处理器,是一种服务器端,跨平台,HTML嵌入式的脚本语言,具有c语言,Java语言, ...

  5. 7. Input and Output

    7. Input and Output There are several ways to present the output of a program; data can be printed i ...

  6. 百度云服务器CentOs6.8安装gnome图形化界面并通过VNC远程访问

    一:安装gnome桌面 利用xshell 登陆上远程主机 依次执行下列命令: [root@lys]#yum groupinstall -y "X Window System" [r ...

  7. 使用Cloudera Manager搭建Impala环境

    使用Cloudera Manager搭建Impala服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用CM安装Imapala 1>.进入CM的服务安装向导 2> ...

  8. 分布式结构化存储系统-HBase基本架构

    分布式结构化存储系统-HBase基本架构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在大数据领域中,除了直接以文件形式保存数据外,还有大量结构化和半结构化的数据,这类数据通常需 ...

  9. React系列,初识

    学习react对于新手来说,还没有学react往往就会被webpack,npm等搞的晕头转向,所以我们今天就从最简单的方式入手 <script src="react.js"& ...

  10. SpringBoot序列化时间类型的问题

    在使用sringboot的时候因为在配置文件中缺少一个配置项,所以导致查询出来的时间都是long类型的时间格式 因为springboot默认使用的是Jackson 这个时间显然不是我们所需要的,参考官 ...