OpenJ9 ile Docker’da Spring Boot Uygulaması Çalıştırma

elifcan cakmak
Kod Gemisi
Published in
3 min readMay 3, 2018

--

OpenJ9, IBM ve Eclipse tarafından geliştirilmiş bir JVM (Java Virtual Machine)’dir. Bize sunduğu avantajlar ise resmi sitesinde düşük memory kullanımı, uygulamaların ayağa kalkma süresinde hızlılık ve uygulama kullanımında verimlilik olarak sayılıyor. OpenJ9'ı isterseniz kendiniz derleyebilir isterseniz de hazır binary dosyasını indirebilirsiniz.

Biz de bugün blog yazımızda OpenJDK, Oracle JDK ve OpenJ9+OpenJDK ile Docker’da Spring Boot uygulamamızı ayağa kaldırdığımızda ne gibi farklarla karşılaşıyoruz bunu inceleyeceğiz. Biz uygulamayı docker swarm ile service olarak çalıştırdık. Aşağıdaki Dockerfile’lar örnek olarak verilmiştir. Sizin ihtiyaçlarınıza göre farklılık gösterecektir.

Oracle JDK

Oracle JDK ile uygulamayı derleyebilmek için içerisinde oracle JDK 8 bulunan alpine dağıtımı ile hazırlanmış bir image kullanıyoruz. Bunun için aşağıdaki gibi bir Dockerfile hazırlıyoruz.

FROM frolvlad/alpine-oraclejdk8:slim
RUN apk update
ADD app.jar /opt/app.jar
EXPOSE 8080 8001
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xmx512m","-jar","/opt/app.jar"]

Oracle JDK kullanarak oluşturduğumuz image’i çalıştırdığımız zaman aşağıdaki gibi sonuçlarla karşılaştık:

Memory Kullanımı
Uygulamanın startup süresi

Uygulamanın memory kullanımı 728 MiB ve startup süresi 126 saniye olarak görülüyor.

OpenJDK

OpenJDK ile uygulamayı derleyebilmek için OpenJDK’nın resmi docker image’ini kullanıyoruz. Aşağıdaki gibi bir Dockerfile’ımız oluyor:

FROM openjdk:8
ADD app.jar /opt/app.jar
EXPOSE 8080 8001
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xmx512m","-jar","/opt/app.jar"]

OpenJDK kullanarak oluşturduğumuz image’i çalıştırdığımız zaman aşağıdaki gibi sonuçlarla karşılaştık:

Memory Kullanımı
Uygulamanın startup süresi

Uygulamanın memory kullanımı 595 MiB ve startup süresi 89 saniye olarak görülüyor.

OpenJDK + OpenJ9

OpenJDK ve OpenJ9 ile uygulamamızı derleyebilmek için öncelikle OpenJ9 image’imizi oluşturmamız gerekiyor. Bunun için aşağıdaki Dockerfile’ı kullanabilirsiniz.

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && update-ca-certificates && apt-get install -y --no-install-recommends openssl curl && mkdir openj9 && cd openj9 && curl -L https://github.com/AdoptOpenJDK/openjdk8-openj9-releases/releases/download/jdk8u162-b12_openj9-0.8.0/OpenJDK8-OPENJ9_x64_Linux_jdk8u162-b12_openj9-0.8.0.tar.gz | tar xz && apt-get remove -y curl openssl && apt autoremove -y && rm -rf /var/lib/apt/lists/*
ENV PATH="/openj9/jdk8u162-b12_openj9-0.8.0/bin:${PATH}"
RUN java -version ## Bu komutu her şeyin düzgün gittiğini kontrol etmek için koyduk.

Uygulamamızın Dockerfile’ı ise aşağıdaki gibi olacak:

FROM openj9
ADD app.jar /opt/app.jar
EXPOSE 8080 8001
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xmx512m","-jar","/opt/app.jar"]

OpenJDK ve OpenJ9 kullanarak oluşturduğumuz image’i çalıştırdığımız zaman aşağıdaki gibi sonuçlarla karşılaştık:

Memory Kullanımı
Uygulamanın startup süresi

Uygulamanın memory kullanımı 255 MiB ve startup süresi 103 saniye olarak görülüyor.

Sonuç

Sonuç olarak görebiliyoruz ki OpenJ9 ile kullandığımız OpenJDK ile derlenmiş uygulamanın memory kullanımında gözle görülür derecede bir azalma sağlıyor. Bununla birlikte startup süresinde yalnızca OpenJDK ile derlediğimiz uygulamanın daha hızlı olduğunu görebiliyoruz. Bu adımda OpenJ9'ın çok etkili olmadığını söyleyebiliriz. Aşağıda karşılaştırmalı olarak görebilirsiniz.

OpenJ9 ile ilgili daha fazla bilgi edinmek için resmi sitesine göz atabilirsiniz.

--

--