将OpenJ9 JVM用于Quarkus应用程序

在本文中,请参阅如何对Quarkus应用程序使用OpenJ9 JVM,并查看内存使用情况结果。抽丝剥茧 细说架构那些事——【优锐课】

根据主页上的定义,Quarkus是“为OpenJDK HotSpot和GraalVM量身定制的Kubernetes本机Java堆栈”。由于我是OpenJ9的忠实拥护者,因此我快速测量了我的反应性示例应用程序的内存使用情况,在其中我使用OpenJ9和HotSpot运行一次微服务。

OpenJ9是Java JVM,它是2-3年前从IBM开源的。它与IBM在数百种产品和产品中使用的JVM基本相同。令人高兴的是,与Hotspot相比,它不仅启动时间缩短了42%,而且内存占用空间减少了66%。查看文档。

我使用了AdoptOpenJDK中的OpenJ9,你可以在HotSpot和OpenJ9之间进行选择。阅读我以前的博客,以了解AdoptOpenJDK提供的其他优势。

内存使用结果

这是我的小测试结果。该图来自Quarkus网站。橙色的所有内容都是我为OpenJ9添加的内容。

我运行了相同的服务,该服务使用OpenJ9和HotSpot访问数据库。我从头开始部署了该服务的两个版本,并通过调用它们的REST API对其进行了预热。之后,我调用了“ docker stats | grep文章有效”。热点显示为149.8MiB,OpenJ9显示为59.77MiB。

如何进行测试

我使用了示例应用程序,它是cloud-native-starter项目的一部分。微服务提供REST API,这些API在PostgreSQL数据库上执行CRUD操作。

要在Minikube中使用OpenJ9运行微服务,请调用以下命令。

1

$ git clone https://github.com/IBM/cloud-native-starter.git

$ cd cloud-native-starter/reactive

$ sh scripts/start-minikube.sh

$ sh scripts/deploy-kafka.sh

$ sh scripts/deploy-postgres.sh

$ sh scripts/deploy-articles-reactive-postgres.sh

$ curl ... [invoke command to trigger APIs returned by previous command]

$ docker stats | grep articles-reactive
 

我使用了以下Dockerfile:

FROM adoptopenjdk/maven-openjdk11 as BUILD
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
WORKDIR /usr/src/app
RUN mvn package

 
FROM adoptopenjdk/openjdk11-openj9:ubi-minimal
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV AB_ENABLED=jmx_exporter
RUN mkdir /opt/shareclasses
RUN chmod a+rwx -R /opt/shareclasses
RUN mkdir /opt/app
COPY --from=BUILD /usr/src/app/target/lib/* /opt/app/lib/
COPY --from=BUILD /usr/src/app/target/*-runner.jar /opt/app/app.jar
CMD ["java", "-Xmx128m", "-XX:+IdleTuningGcOnIdle", "-Xtune:virtualized", "-Xscmx128m", "-Xscmaxaot100m", "-Xshareclasses:cacheDir=/opt/shareclasses", "-jar", "/opt/app/app.jar"]

为了使用Hotspot,请用Dockerfile.Hotspot中的内容替换Dockerfile并运行相同的命令。

FROM adoptopenjdk/maven-openjdk11 as BUILD
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
WORKDIR /usr/src/app
RUN mvn package
 
FROM fabric8/java-alpine-openjdk11-jre
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV AB_ENABLED=jmx_exporter
COPY --from=BUILD /usr/src/app/target/lib/* /deployments/lib/
COPY --from=BUILD /usr/src/app/target/*-runner.jar /deployments/app.jar
ENTRYPOINT [ "/deployments/run-java.sh" ]

感谢阅读!

猜你喜欢

转载自www.cnblogs.com/youruike-/p/12509746.html