当前位置: 移动技术网 > IT编程>开发语言>Java > 将OpenJ9 JVM用于Quarkus应用程序

将OpenJ9 JVM用于Quarkus应用程序

2020年03月17日  | 移动技术网IT编程  | 我要评论

在本文中,请参阅如何对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" ]

感谢阅读!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网