带有类数据共享的预热Java Docker镜像



我想创建一个docker映像,该映像在具有OpenJ9的类数据共享功能的Java服务上运行,以提高启动性能。我想在使用多阶段docker构建图像的同时创建类缓存。我在网上看到了一些关于预热码头工人的图片,比如这个

https://github.com/barecode/adopt-openj9-spring-boot/blob/master/Dockerfile.openj9.warmed

然而,我无法在这里重新创建它,这是我的Dockerfile

FROM adoptopenjdk/openjdk11-openj9:alpine as base
ADD libs/ /libs
ADD service.jar /service.jar
RUN mkdir /hi
WORKDIR /hi
RUN ls /
RUN java -Xshareclasses:name=mycache -Xshareclasses:cacheDir=/hi -Xshareclasses -jar /usr/share/app/service.jar &
RUN sleep 5
RUN ls -la /hi
FROM adoptopenjdk/openjdk11-openj9:alpine-jre
COPY --from=base libs/ /usr/share/app/libs
COPY --from=base service.jar /usr/share/app/service.jar
RUN /bin/sh -c 'ps aux | grep java | grep service | awk '{print $2}' | xargs kill -1'
#RUN java -Xshareclasses:listAllCaches
ENTRYPOINT ["java","-jar", "-Xshareclasses" , "-Xtune:virtualized", "-XX:+UseContainerSupport", "/usr/share/app/service.jar"]

我的问题是当我运行时

RUN java -Xshareclasses:name=mycache -Xshareclasses:cacheDir=/hi -Xshareclasses -jar /usr/share/app/service.jar &

然后期望缓存文件保存在/hi上,但文件不在那里。

任何帮助都将不胜感激。谢谢

OpenJ9只读取提供的最后一个-Xshareclasses选项。这使得在开发/调试时可以很容易地替换命令行中以前的选项,因为在某些环境中,很难修改现有的命令行参数。

将命令更改为:

RUN java -Xshareclasses:name=mycache,cacheDir=/hi -jar /usr/share/app/service.jar &

并且将在CCD_ 2目录中创建高速缓存。

例如:

# java -Xshareclasses:name=mycache,cacheDir=/hi -version
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.4+11)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.15.1, JRE 11 Linux amd64-64-Bit Compressed References 20190717_286 (JIT enabled, AOT enabled)
OpenJ9   - 0f66c6431
OMR      - ec782f26
JCL      - fa49279450 based on jdk-11.0.4+11)
# ls /hi
C290M11F1A64P_mycache_G37

相关内容

  • 没有找到相关文章

最新更新