Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Java uygulamalarını kapsayıcıya alma için önerilen stratejilere ve ayarlara genel bir bakış sağlanır. bir Java uygulamasını kapsayıcıya aldığınızda, kapsayıcının ne kadar CPU süresi olduğunu dikkatle göz önünde bulundurun. Daha sonra hem toplam bellek miktarı hem de Java Sanal Makinesi'nin (JVM) yığın boyutu açısından ne kadar belleğin kullanılabilir olduğunu göz önünde bulundurun. Kapsayıcılı ortamlarda uygulamalar tüm işlemcilere erişebilir ve bu nedenle birden çok iş parçacığını paralel olarak çalıştırabilir. Ancak kapsayıcıların CPU'lara erişimi kısıtlayan bir CPU kotası uygulanması yaygın bir durumdur.
JVM, CPU kotasına göre "kullanılabilir işlemcilerin" sayısını belirlemek için buluşsal yöntemler kullanır ve bu da Java uygulamaların performansını önemli ölçüde etkileyebilir. Kapsayıcının kendisine ayrılan bellek ve JVM için yığın alanının boyutu işlemciler kadar önemlidir. Bu faktörler, çöp toplayıcının (GC) davranışını ve sistemin genel performansını belirler.
Tavsiye
Bu ayarları el ile ayarlamak istemiyorsanız, Java () jaz sizin için buluta özel JVM varsayılanlarını otomatik olarak uygular. Bu, kapsayıcı sınırlarını algılayan ve en uygun yığın boyutlandırması ile GC bayraklarını seçen java komutunun yerine doğrudan kullanılabilen bir alternatiftir. Daha fazla bilgi için bkz. Java için Azure Komut Başlatıcı ile JVM'yi otomatik olarak ayarlama.
Yeni bir uygulamayı kapsayıcıya alma
Yeni bir uygulama için Java iş yükünü kapsayıcıya aldığınızda, bellek hakkında düşünürken iki şeyi göz önünde bulundurun:
- Kapsayıcıya ayrılan bellek.
- Java işlemi için kullanılabilir bellek miktarı.
JVM varsayılan ergonomiyi anlama
Uygulamaların bir başlangıç noktası ve ayarları olması gerekir. JVM, kullanılabilir işlemci sayısına ve sistemdeki bellek miktarına göre önceden tanımlanmış değerlere sahip varsayılan ergonomiye sahiptir. JVM, belirli başlangıç bayrakları veya parametreleri olmadan başlattığınızda aşağıdaki tablolarda gösterilen varsayılan değerleri kullanır.
Aşağıdaki tabloda, kullanılabilir kaynaklar için varsayılan GC gösterilmektedir:
| Kullanılabilir kaynaklar | Varsayılan GC |
|---|---|
| herhangi bir sayıda işlemci En fazla 1.791 MB bellek |
SerialGC |
| 2' den fazla işlemci 1.792 MB veya daha fazla bellek |
G1GC |
Aşağıdaki tabloda, JVM'nin çalıştığı ortamda ne kadar bellek bulunduğuna bağlı olarak varsayılan en yüksek yığın boyutu gösterilmektedir:
| Kullanılabilir bellek | Varsayılan en büyük yığın boyutu |
|---|---|
| 256 MB'a kadar | 50% kullanılabilir bellek |
| 256 MB - 512 MB | Yaklaşık 127 MB |
| 512 MB'tan fazla | 25% kullanılabilir bellek |
Varsayılan ilk yığın boyutu kullanılabilir belleğin 1/64'dür. Bu değerler OpenJDK 11 ve üzeri için ve Microsoft Build OpenJDK, Azul Zulu, Eclipse Temurin, Oracle OpenJDK ve diğerleri gibi çoğu dağıtım için geçerlidir.
Kapsayıcı belleğini belirleme
Uygulamanızın gereksinimlerine ve ayırt edici kullanım desenlerine bağlı olarak iş yükünüz için en uygun kapsayıcı bellek miktarını seçin. Örneğin, uygulamanız büyük nesne grafları oluşturuyorsa, büyük olasılıkla çok sayıda küçük nesne grafı olan uygulamalar için gerekenden daha fazla belleğe ihtiyacınız vardır.
Tavsiye
Ne kadar bellek ayırabileceğinizi bilmiyorsanız, iyi bir başlangıç noktası 4 GB'tır.
JVM yığın belleğini belirleme
JVM yığın belleği ayırdığınızda, JVM'nin JVM yığını için ayırdığınız miktardan daha fazla belleğe ihtiyacı olduğunu unutmayın. En fazla JVM yığın belleğini kapsayıcı belleği miktarına eşit olacak şekilde ayarlamayın. Bu ayar, kapsayıcı Bellek Yetersizliği (OOM) hatalarına ve kapsayıcı kilitlenmelerine neden olabilir.
Tavsiye
JVM yığını için 75% kadar kapsayıcı belleği ayırın.
OpenJDK 11 ve sonraki sürümlerde JVM yığın boyutunu aşağıdaki yollardan biriyle ayarlayın:
| Açıklama | Bayrak | Örnekler |
|---|---|---|
| Sabit değer | -Xmx |
-Xmx4g |
| Dinamik değer | -XX:MaxRAMPercentage |
-XX:MaxRAMPercentage=75 |
En düşük veya başlangıç yığın boyutu
Ortam, kapsayıcıdaki gibi bir JVM örneğine ayrılmış belirli bir bellek miktarını garanti ederse, en düşük yığın boyutunu veya ilk yığın boyutunu en büyük yığın boyutuyla aynı boyuta ayarlayın. Bu ayar, JVM'ye işletim sistemine bellek boşaltma görevini gerçekleştirmemesi gerektiğini gösterir.
En düşük yığın boyutunu ayarlamak için mutlak tutarlar veya -Xms yüzde miktarları için kullanın-XX:InitialRAMPercentage.
Önemli
Adın önerdiğine rağmen, bayrak -XX:MinRAMPercentage sistemde 256 MB'a kadar RAM'e sahip sistemler için varsayılan maksimum RAM yüzdesini ayarlar.
Kullanılacak GC'yi belirleme
Daha önce, başlangıç olarak JVM yığın belleği miktarını belirlediniz. Bir sonraki adım, Genel Müdürünüzü seçmektir. Sahip olduğunuz maksimum JVM yığın belleği miktarı genellikle GC seçiminizi etkiler. Aşağıdaki tabloda her GC'nin özellikleri açıklanmaktadır.
| Faktörler | SerialGC | ParallelGC | G1GC | ZGC | ShenandoahGC |
|---|---|---|---|---|---|
| Çekirdek sayısı | 1 | 2 | 2 | 2 | 2 |
| Çok iş parçacıklı | Hayı | Evet | Evet | Evet | Evet |
| Java yığın boyutu | <4GB | <4GB | >4GB | >4GB | >4GB |
| Durdur | Evet | Evet | Evet | Evet (<1 ms) | Evet (<10 ms) |
| Genel Masraf | Minimal | Minimal | Orta | Orta | Orta |
| Kuyruk gecikme süresi Etkisi | Yüksek | Yüksek | Yüksek | Düşük | Orta |
| JDK sürümü | Tümü | Tümü | JDK 8+ | JDK 17+ | JDK 11+ |
| En iyi kullanım alanı: | Tek çekirdekli küçük yığınlar | Herhangi bir yığın boyutuna sahip çok çekirdekli küçük yığınlar veya toplu iş yükleri | Orta ve büyük yığınlarda yanıt verme (istek-yanıt/VERITABANı etkileşimleri) | Orta ve büyük yığınlarda yanıt verme (istek-yanıt/VERITABANı etkileşimleri) | Orta ve büyük yığınlarda yanıt verme (istek-yanıt/VERITABANı etkileşimleri) |
Tavsiye
Genel amaçlı mikro hizmet uygulamalarının çoğu için Paralel GC ile başlayın.
Kaç CPU çekirdeğine ihtiyacınız olduğunu belirleme
SerialGC dışındaki herhangi bir GC için iki ya da daha fazla vCPU çekirdeği kullanın veya Kubernetes üzerinde 2000m için en az cpu_limit kullanın. Kapsayıcılı ortamlarda birden az vCPU çekirdeği seçmeyin.
Tavsiye
Başlangıç olarak kaç çekirdekle başlayacağınızı bilmiyorsanız, iki vCPU çekirdeği iyi bir seçimdir.
Başlangıç noktası seçin
Kubernetes, OpenShift, Azure Spring Apps, Azure Container Apps ve Azure App Service gibi kapsayıcı düzenleme ortamlarındaki iki çoğaltma veya örnekle başlayın. Aşağıdaki tabloda, yeni Java uygulamanızın kapsayıcılı hale getirilmesi için önerilen başlangıç noktaları özetlenmiştir.
| vCPU çekirdekleri | Konteyner belleği | JVM yığın boyutu | GC | Replikalar |
|---|---|---|---|---|
| 2 | 4GB | 75% | ParallelGC | 2 |
Aşağıdaki JVM parametrelerini kullanın:
-XX:+UseParallelGC -XX:MaxRAMPercentage=75
Java için Azure Komut Başlatıcı ile JVM'yi otomatik olarak ayarlama
Yukarıdaki bölümlerde kapsayıcı belleğinize, CPU çekirdeklerinize ve iş yükü türünüz temelinde JVM bayraklarının el ile nasıl seçileceği açıklanmaktadır. Bu ayarları kendiniz korumak istemiyorsanız Java () jaz, bulutta yerel JVM varsayılanlarını otomatik olarak uygular.
Java için Azure Komut Başlatıcısı, başlangıç komutunuz ile JVM arasında yer alan basit bir yardımcı programdır. Kapsayıcı belleği ve CPU sınırları dahil olmak üzere bulut ortamını algılar ve yığın boyutlandırma, GC seçimi ve tanılama için en uygun ayarlama bayraklarını seçer. Bu yaklaşım, yapılandırma yükünü azaltır ve varsayılan olarak kaynak kullanımını iyileştirir.
Aracı kullanmak için, başlatma betiğinizde veya Dockerfile'da java komutunu jaz ile değiştirin. Örneğin, JVM seçeneklerini el ile ayarlamak yerine:
java -XX:+UseParallelGC -XX:MaxRAMPercentage=75 -jar myapp.jar
jaz kullanın:
jaz -jar myapp.jar
Araç, Microsoft Build OpenJDK kapsayıcı görüntülerine eklendiğinden ek kurulum gerekmez. Aşağıdaki Dockerfile, bir jar dosyasından bir Java uygulamasını çalıştırmak için jaz kullanır:
# Use any Microsoft Build of OpenJDK base image
FROM mcr.microsoft.com/openjdk/jdk:25-ubuntu
# Add your application.jar
COPY application.jar /application.jar
# Use jaz to launch your Java application
CMD ["jaz", "-jar", "application.jar"]
Yükleme seçenekleri, desteklenen ortamlar ve yapılandırma ayrıntıları için bkz. Java için Azure Komut Başlatıcısı.
Mevcut bir şirket içi uygulamayı kapsayıcıya alma
Uygulamanız zaten şirket içinde veya bulutta bir VM'de çalışıyorsa, aşağıdaki yapılandırmayla başlayın:
- Uygulamanın şu anda erişebildiği bellek miktarı.
- Uygulamanın şu anda kullanılabilir durumdaki CPU veya vCPU çekirdeği sayısıyla aynı.
- Şu anda kullandığınız JVM parametreleri.
vCPU çekirdekleri veya kapsayıcı bellek bileşimi kullanılamıyorsa, vCPU çekirdeklerini ve kapsayıcı belleğini yuvarlayarak en yakın olanı seçin.
Sonraki Adımlar
Java uygulamalarını kapsayıcıya almaya yönelik genel önerileri anladığınıza göre, kapsayıcılama temeli oluşturmak ve JVM ayarlamayı basitleştirmek için aşağıdaki makalelere geçin: