zoukankan      html  css  js  c++  java
  • 将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" ]

    感谢阅读!

  • 相关阅读:
    游戏编程模式--原型模式
    游戏编程模式--观察者模式
    游戏编程模式--享元模式
    游戏编程模式--命令模式
    mybatis的线程安全
    开发遇到的问题
    spring的ThreadLocal解决线程安全
    i++
    jvm内存初步了解
    注解@RequestMapping,@RequestBody
  • 原文地址:https://www.cnblogs.com/youruike-/p/12509746.html
Copyright © 2011-2022 走看看