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 falseayarlayın.

Aşağıdaki örneklerde , upve update komutlarıyla createbellek 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_OPTIONSortam 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)

Sonraki adımlar