Bagikan melalui


Menggunakan memori secara efisien untuk aplikasi Java di Azure Container Apps

Java Virtual Machine (JVM) menggunakan memori secara konservatif karena mengasumsikan memori OS harus dibagikan di antara beberapa aplikasi. Namun, aplikasi kontainer Anda dapat mengoptimalkan penggunaan memori dan membuat jumlah memori maksimum yang mungkin tersedia untuk aplikasi Anda. Pengoptimalan memori ini dikenal sebagai pas memori otomatis Java. Ketika pengepasan memori diaktifkan, performa aplikasi Java biasanya ditingkatkan antara 10% dan 20% tanpa perubahan kode apa pun.

Azure Container Apps menyediakan kecocokan memori otomatis dalam keadaan berikut:

  • Satu aplikasi Java berjalan dalam kontainer.
  • Aplikasi Anda disebarkan dari kode sumber atau file JAR.

Penyesuaian memori otomatis diaktifkan secara default, tetapi Anda dapat menonaktifkan secara manual.

Menonaktifkan penyesuaian memori

Penyesuaian memori otomatis sangat membantu dalam sebagian besar skenario, tetapi mungkin tidak ideal untuk semua situasi. Anda dapat menonaktifkan pas memori secara manual atau otomatis.

Nonaktifkan manual

Untuk menonaktifkan penyesuaian memori saat Anda membuat aplikasi kontainer, atur variabel BP_JVM_FIT lingkungan ke false.

Contoh berikut menunjukkan kepada Anda cara menggunakan nonaktifkan kecocokan memori dengan createperintah , , updan update .

az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --image <CONTAINER_IMAGE_LOCATION> \
  --environment <ENVIRONMENT_NAME> \
  --env-vars BP_JVM_FIT="false" 

Untuk memverifikasi bahwa pengepasan memori dinonaktifkan, periksa log Anda untuk pesan berikut:

Menonaktifkan pas memori jvm, alasan: dinonaktifkan secara manual

Nonaktifkan otomatis

Pengikatan memori secara otomatis dinonaktifkan ketika salah satu kondisi berikut terpenuhi:

  • Memori kontainer terbatas: Memori kontainer kurang dari 1 GB.

  • Mengatur opsi memori secara eksplisit: Ketika satu atau beberapa pengaturan memori ditentukan dalam variabel lingkungan melalui JAVA_TOOL_OPTIONS. Opsi pengaturan memori mencakup nilai berikut:

    • -XX:MaxRAMPercentage
    • -XX:MinRAMPercentage
    • -XX:InitialRAMPercentage
    • -XX:MaxMetaspaceSize
    • -XX:MetaspaceSize
    • -XX:ReservedCodeCacheSize
    • -XX:MaxDirectMemorySize
    • -Xmx
    • -Xms
    • -Xss

    Misalnya, pengepasan memori secara otomatis dinonaktifkan jika Anda menentukan ukuran timbunan maksimum dalam variabel lingkungan seperti yang ditunjukkan contoh berikut:

    az containerapp update \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --image <CONTAINER_IMAGE_LOCATION>  \
      --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m" 
    

    Dengan memori pas dinonaktifkan, Anda akan melihat output pesan berikut ke log:

    Menonaktifkan pas memori jvm, alasan: gunakan pengaturan yang ditentukan dalam JAVA_TOOL_OPTIONS=-Xmx512m sebagai gantinya Mengambil JAVA_TOOL_OPTIONS: -Xmx512m

  • Ukuran memori non-tumpukan kecil: Kasus langka ketika ukuran heap atau ukuran nonheap yang dihitung terlalu kecil (kurang dari 200 MB).

Verifikasi bahwa kecocokan memori diaktifkan

Periksa aliran log Anda selama start-up untuk pesan yang mereferensikan Konfigurasi Memori JVM Terhitung.

Berikut adalah contoh output pesan selama start-up.

Konfigurasi Memori JVM Terhitung: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (Total Memori: 2G, Jumlah Utas: 250, Jumlah Kelas yang Dimuat: 12924, Headroom: 0%)

Diambil JAVA_TOOL_OPTIONS: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M

Konfigurasi runtime

Anda dapat mengatur variabel lingkungan untuk memengaruhi perilaku pas memori.

Variabel Unit Contoh Deskripsi
BPL_JVM_HEAD_ROOM Persentase BPL_JVM_HEAD_ROOM=5 Biarkan ruang memori untuk sistem berdasarkan persentase yang diberikan.
BPL_JVM_THREAD_COUNT Angka BPL_JVM_THREAD_COUNT=200 Perkiraan jumlah maksimum utas.
BPL_JVM_CLASS_ADJUSTMENT Angka
Persentase
BPL_JVM_CLASS_ADJUSTMENT=10000
BPL_JVM_CLASS_ADJUSTMENT="10%"
Sesuaikan jumlah kelas JVM berdasarkan nilai atau persentase eksplisit.

Catatan

Mengubah variabel ini tidak menonaktifkan penyesuaian memori otomatis.

Peringatan kehabisan memori

Jika Anda memutuskan untuk mengonfigurasi pengaturan memori sendiri, Anda menjalankan risiko mengalami peringatan di luar memori.

Berikut adalah beberapa kemungkinan alasan mengapa kontainer Anda dapat kehabisan memori:

  • Memori timbunan lebih besar dari total memori yang tersedia.

  • Memori nonheap lebih besar dari total memori yang tersedia.

  • Memori heap + nonheap lebih besar dari total memori yang tersedia.

Jika kontainer Anda kehabisan memori, maka Anda mengalami peringatan berikut:

Peringatan OOM: memori tumpukan 1200M lebih besar dari 1G yang tersedia untuk alokasi (-Xmx1200M)

Langkah berikutnya