将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和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" ]
感谢阅读!