Azure Container Apps'te Java uygulamaları için belleği verimli bir şekilde kullanma (önizleme)
Java Sanal Makinesi (JVM), işletim sistemi belleğinin birden çok uygulama arasında paylaşılması gerektiğini varsayması nedeniyle belleği muhafazakar bir şekilde kullanır. Ancak kapsayıcı uygulamanız bellek kullanımını iyileştirebilir ve uygulamanız için mümkün olan en yüksek bellek miktarını sağlayabilir. Bu bellek iyileştirmesi Java otomatik bellek sığdırma olarak bilinir. Bellek sığdırma etkinleştirildiğinde Java uygulama performansı genellikle kod değişikliği yapılmadan %10 ile %20 arasında iyileştirilir.
Azure Container Apps aşağıdaki koşullarda otomatik bellek sığdırma sağlar:
- Kapsayıcıda tek bir Java uygulaması çalışıyor.
- Uygulamanız kaynak koddan veya JAR dosyasından dağıtılır.
Otomatik bellek sığdırma varsayılan olarak etkindir, ancak el ile devre dışı bırakabilirsiniz.
Bellek sığdırma özelliğini devre dışı bırakma
Otomatik bellek sığdırma çoğu senaryoda yararlıdır, ancak tüm durumlar için ideal olmayabilir. Bellek sığdırma özelliğini el ile veya otomatik olarak devre dışı bırakabilirsiniz.
El ile devre dışı bırakma
Kapsayıcı uygulamanızı oluştururken bellek sığdırma özelliğini devre dışı bırakmak için ortam değişkenini BP_JVM_FIT
olarak false
ayarlayın.
Aşağıdaki örneklerde , up
ve update
komutlarıyla create
bellek sığdırma özelliğini nasıl devre dışı bırakabileceğiniz gösterilmektedir.
az containerapp create \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--image <CONTAINER_IMAGE_LOCATION> \
--environment <ENVIRONMENT_NAME> \
--env-vars BP_JVM_FIT="false"
Bellek sığdırma seçeneğinin devre dışı bırakıldığını doğrulamak için günlüklerinizde aşağıdaki iletiyi denetleyin:
jvm bellek bağlantısını devre dışı bırakma, neden: el ile devre dışı
Otomatik devre dışı bırakma
Aşağıdaki koşullardan herhangi biri karşılandığında bellek sığdırma otomatik olarak devre dışı bırakılır:
Sınırlı kapsayıcı belleği: Kapsayıcı belleği 1 GB'tan azdır.
Bellek seçeneklerini açıkça ayarlayın: aracılığıyla
JAVA_TOOL_OPTIONS
ortam değişkenlerinde bir veya daha fazla bellek ayarı belirtildiğinde. Bellek ayarı seçenekleri aşağıdaki değerleri içerir:-XX:MaxRAMPercentage
-XX:MinRAMPercentage
-XX:InitialRAMPercentage
-XX:MaxMetaspaceSize
-XX:MetaspaceSize
-XX:ReservedCodeCacheSize
-XX:MaxDirectMemorySize
-Xmx
-Xms
-Xss
Örneğin, aşağıdaki örnekte gösterildiği gibi bir ortam değişkeninde en büyük yığın boyutunu belirtirseniz bellek sığdırma otomatik olarak devre dışı bırakılır:
az containerapp update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --image <CONTAINER_IMAGE_LOCATION> \ --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m"
Bellek sığdırma devre dışı bırakılmıştır, günlük için aşağıdaki ileti çıkışını görürsünüz:
jvm bellek sığdırma özelliğini devre dışı bırakma, neden: bunun yerine JAVA_TOOL_OPTIONS=-Xmx512m içinde belirtilen ayarları kullanın JAVA_TOOL_OPTIONS alındı: -Xmx512m
Yığın olmayan küçük bellek boyutu: Yığın veya yığın dışı boyutun hesaplanmış boyutunun çok küçük olduğu nadir durumlar (200 MB'tan az).
Bellek sığdırma özelliğinin etkinleştirildiğini doğrulama
Hesaplanmış JVM Bellek Yapılandırması'na başvuran bir ileti için başlatma sırasında günlük akışınızı inceleyin.
Aşağıda, başlatma sırasında örnek bir ileti çıkışı verilmişti.
Hesaplanan JVM Bellek Yapılandırması: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (Toplam Bellek: 2G, İş Parçacığı Sayısı: 250, Yüklenen Sınıf Sayısı: 12924, Headroom: 0%)
JAVA_TOOL_OPTIONS alındı: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M
Çalışma zamanı yapılandırması
Ortam değişkenlerini bellek sığdırma davranışını etkileyecek şekilde ayarlayabilirsiniz.
Değişken | Unit | Örnek | Açıklama |
---|---|---|---|
BPL_JVM_HEAD_ROOM |
Yüzde | BPL_JVM_HEAD_ROOM=5 |
Verilen yüzdeye göre sistem için bellek alanı bırakın. |
BPL_JVM_THREAD_COUNT |
Sayı | BPL_JVM_THREAD_COUNT=200 |
Tahmini en fazla iş parçacığı sayısı. |
BPL_JVM_CLASS_ADJUSTMENT |
Sayı Yüzde |
BPL_JVM_CLASS_ADJUSTMENT=10000 BPL_JVM_CLASS_ADJUSTMENT="10%" |
JVM sınıf sayısını açık değere veya yüzdeye göre ayarlayın. |
Not
Bu değişkenlerin değiştirilmesi otomatik bellek sığdırma özelliğini devre dışı bırakmaz.
Bellek yetersiz uyarısı
Bellek ayarlarını kendiniz yapılandırmaya karar verirseniz, bellek yetersiz uyarısıyla karşılaşma riskiyle karşılaşırsınız.
Kapsayıcınızın belleğinin yetersiz olmasının bazı olası nedenleri şunlardır:
Yığın belleği toplam kullanılabilir bellekten büyüktür.
Yığın olmayan bellek, kullanılabilir toplam bellekten büyüktür.
Yığın + yığın olmayan bellek, kullanılabilir toplam bellekten büyüktür.
Kapsayıcınızın belleği yetersizse aşağıdaki uyarıyla karşılaşırsınız:
OOM Uyarısı: 1200M yığın belleği ayırma için 1G'den büyüktür (-Xmx1200M)