Skip to content

Instantly share code, notes, and snippets.

@yujiorama
Last active October 21, 2019 00:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yujiorama/486ac102b4ed9a483fdf6dbe6d56b14e to your computer and use it in GitHub Desktop.
Save yujiorama/486ac102b4ed9a483fdf6dbe6d56b14e to your computer and use it in GitHub Desktop.
java dynaimc cds in container
FROM openjdk:12-jdk AS base
ENV SDKMAN_DIR=/usr/local/sdkman
WORKDIR /myapp
RUN set -x \
&& yum update -y \
&& yum install -y ca-certificates curl zip unzip sed binutils which \
&& curl -fsSL https://get.sdkman.io | bash \
&& echo source \"${SDKMAN_DIR}/bin/sdkman-init.sh\" > /etc/profile.d/sdkman.sh
RUN set -x \
&& bash -l -c "sdk install micronaut 1.2.5" \
&& bash -l -c "mn create-app --inplace myapp" \
&& sed -i -e '/public static void main/a System.out.println("JVM - Startup completed in " + java.lang.management.ManagementFactory.getRuntimeMXBean().getUptime());' \
src/main/java/myapp/Application.java \
&& bash -l -c "./gradlew --no-daemon -x test build"
FROM openjdk:13-alpine AS jsa
ENV JAVA_OPTS="-Xmx128m"
WORKDIR /myapp
COPY --from=base /myapp/build/libs/myapp-0.1-all.jar myapp-0.1-all.jar
RUN set -x \
&& /usr/bin/timeout -s INT 5 java -XX:ArchiveClassesAtExit=myapp-0.1.jsa -jar myapp-0.1-all.jar; exit 0
# XXX java.lang.OutOfMemoryError
# FROM openjdk:13-alpine AS so
# ENV JAVA_OPTS="-Xmx128m"
# WORKDIR /myapp
# RUN set -x \
# && jaotc -J-Xmx1024m --output=java.base.so --module java.base
FROM openjdk:13-alpine
ENV JAVA_OPTS="-Xmx128m"
WORKDIR /myapp
COPY --from=jsa /myapp/myapp-0.1-all.jar myapp-0.1-all.jar
COPY --from=jsa /myapp/myapp-0.1.jsa myapp-0.1.jsa
# COPY --from=so /myapp/java.base.so java.base.so
ENTRYPOINT ["/usr/bin/timeout", "-s", "INT", "5", "sh", "-c"]
CMD ["java ${JAVA_OPTS} -jar myapp-0.1-all.jar"]
#!/bin/bash
docker build --rm -f Dockerfile -t dynamic-cds-test:dev .
for _ in $(seq 1 10); do
docker container run --rm -it \
--env JAVA_OPTS="-Xshare:off" dynamic-cds-test:dev
done | tee 01-nocds.log
for _ in $(seq 1 10); do
docker container run --rm -it \
dynamic-cds-test:dev
done | tee 02-defaultcds.log
for _ in $(seq 1 10); do
docker container run --rm -it \
--env JAVA_OPTS="-XX:SharedArchiveFile=./myapp-0.1.jsa" dynamic-cds-test:dev
done | tee 03-dynamiccds.log
# for _ in $(seq 1 10); do
# docker container run --rm -it \
# --env JAVA_OPTS="-XX:SharedArchiveFile=myapp-0.1.jsa -XX:AOTLibrary=java.base.so" dynamic-cds-test:dev
# done | tee 04-aotdynamiccds.log
nocds_jvm=$(grep "Startup completed" 01-nocds.log | grep JVM | awk '{ m+=$6 } END { print m/NR }')
nocds_mn=$(grep "Startup completed" 01-nocds.log | grep Micronaut | awk '{ sub(/ms\./, "", $10); m+=$10 } END { print m/NR }')
defaultcds_jvm=$(grep "Startup completed" 02-defaultcds.log | grep JVM | awk '{ m+=$6 } END { print m/NR }')
defaultcds_mn=$(grep "Startup completed" 02-defaultcds.log | grep Micronaut | awk '{ sub(/ms\./, "", $10); m+=$10 } END { print m/NR }')
dynamiccds_jvm=$(grep "Startup completed" 03-dynamiccds.log | grep JVM | awk '{ m+=$6 } END { print m/NR }')
dynamiccds_mn=$(grep "Startup completed" 03-dynamiccds.log | grep Micronaut | awk '{ sub(/ms\./, "", $10); m+=$10 } END { print m/NR }')
cat - <<EOF
| パターン | JVM | Micronaut |
|:-:|:-:|:-:|
| NoCDS | ${nocds_jvm} | ${nocds_mn} |
| DefaultCDS | ${defaultcds_jvm} | ${defaultcds_mn} |
| DynamicCDS | ${dynamiccds_jvm} | ${dynamiccds_mn} |
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment