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 create
perintah , , up
dan 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk