接下来,您可以对http://localhost:8080/hello(HTTP GET)执行负载测试,并在Grafana仪表板中查看结果。
操作系统差异
不同Docker镜像之间使用的OS不同。 操作系统可通过以下方式确定:
docker exec -it store/oracle/serverjre:8 cat /etc/*-release
azul/zulu-openjdk:8 used Ubuntu 18.04
oracle/graalvm-ce:1.0.0-rc9 used Oracle Linux Server 7.5
openjdk:8 used Debian GNU/Linux 9
store/oracle/serverjre:8 used Oracle Linux Server 7.5
我认为这不会对JVM运行产生太大的影响。OracleJDK和Graalvm使用相同的操作系统。
测试结果
使用JVM dashboard,可以轻松区分特定的差异区域,以便进一步研究它们。
cpu使用
GraalVM在测试期间总体CPU使用率最高。 Oracle JDK的CPU使用率最低。
响应时间
整体GraalVM的响应时间最短,OpenJDK最好,紧随Oracle JDK和Zulu。 平均而言,OpenJDK与GraalVM之间的差异约为30%。
垃圾回收
GraalVM加载了比其他JDK更多的类。 OpenJDK加载最少的类。 GraalVM和OpenJDK之间的差异大约是25%。 尚未确定这是否是GraalVM的固定开销,或者与所使用的类的数量成比例。
这些额外的类可能会导致垃圾收集期间的延迟(尽管这种相关性可能不一定是因果关系)。 GraalVM的的GC暂停时间确实最长。
下面是GC暂停时间总和的图表。 由于GraalVM中的分配失败导致了最长的GC暂停时间。