Last active
August 3, 2024 18:13
-
-
Save yujiorama/486ac102b4ed9a483fdf6dbe6d56b14e to your computer and use it in GitHub Desktop.
java dynaimc cds in container
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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