OpenJ9 ile Docker’da Spring Boot Uygulaması Çalıştırma
Atlassian Jira Danışmanlığı
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 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.
ADD app.jar /opt/app.jar
EXPOSE 8080 8001
Oracle JDK kullanarak oluşturduğumuz image’i çalıştırdığımız zaman aşağıdaki gibi sonuçlarla karşılaştık:
Uygulamanın startup süresi
Uygulamanın memory kullanımı 728 MiB ve startup süresi 126 saniye olarak görülüyor.
OpenJDK ile uygulamayı derleyebilmek için OpenJDK’nın resmi docker image’ini kullanıyoruz. Aşağıdaki gibi bir Dockerfile’ımız oluyor:
OpenJDK kullanarak oluşturduğumuz image’i çalıştırdığımız zaman aşağıdaki gibi sonuçlarla karşılaştık:
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.
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/*
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:
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:
Uygulamanın memory kullanımı 255 MiB ve startup süresi 103 saniye olarak görülüyor.
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.
DevOps @ Kod Gemisi