欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

将OpenJ9 JVM用于Quarkus应用程序

程序员文章站 2022-06-22 09:34:42
在本文中,请参阅如何对Quarkus应用程序使用OpenJ9 JVM,并查看内存使用情况结果。抽丝剥茧 细说架构那些事——【优锐课】 根据主页上的定义,Quarkus是“为OpenJDK HotSpot和GraalVM量身定制的Kubernetes本机Java堆栈”。由于我是OpenJ9的忠实拥护者 ......

在本文中,请参阅如何对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 JVM用于Quarkus应用程序

 

 

 

我运行了相同的服务,该服务使用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" ]

感谢阅读!

将OpenJ9 JVM用于Quarkus应用程序