استخدام الذاكرة بكفاءة لتطبيقات Java في Azure Container Apps (معاينة)
يستخدم جهاز Java الظاهري (JVM) الذاكرة بشكل متحفظ لأنه يفترض أنه يجب مشاركة ذاكرة نظام التشغيل بين تطبيقات متعددة. ومع ذلك، يمكن لتطبيق الحاوية تحسين استخدام الذاكرة وجعل أقصى قدر ممكن من الذاكرة متاحا للتطبيق الخاص بك. يعرف تحسين الذاكرة هذا باسم ملاءمة الذاكرة التلقائية ل Java. عند تمكين ملاءمة الذاكرة، يتم تحسين أداء تطبيق Java عادة بين 10٪ و20٪ دون أي تغييرات في التعليمات البرمجية.
توفر Azure Container Apps ملاءمة تلقائية للذاكرة في ظل الظروف التالية:
- يتم تشغيل تطبيق Java واحد في حاوية.
- يتم نشر التطبيق الخاص بك من التعليمات البرمجية المصدر أو ملف JAR.
يتم تمكين ملاءمة الذاكرة التلقائية بشكل افتراضي، ولكن يمكنك تعطيلها يدويا.
تعطيل ملاءمة الذاكرة
يعد ملاءمة الذاكرة التلقائية مفيدة في معظم السيناريوهات، ولكنها قد لا تكون مثالية لجميع الحالات. يمكنك تعطيل ملاءمة الذاكرة يدويا أو تلقائيا.
تعطيل يدوي
لتعطيل ملاءمة الذاكرة عند إنشاء تطبيق الحاوية، قم بتعيين متغير BP_JVM_FIT
البيئة إلى false
.
توضح لك الأمثلة التالية كيفية استخدام تعطيل ملاءمة الذاكرة مع create
up
الأوامر و و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"
للتحقق من تعطيل ملاءمة الذاكرة، تحقق من سجلاتك بحثا عن الرسالة التالية:
تعطيل ملاءمة ذاكرة jvm، السبب: معطل يدويا
تعطيل تلقائي
يتم تعطيل ملاءمة الذاكرة تلقائيا عند استيفاء أي من الشروط التالية:
ذاكرة حاوية محدودة: ذاكرة الحاوية أقل من 1 غيغابايت.
تعيين خيارات الذاكرة بشكل صريح: عند تحديد إعداد ذاكرة واحد أو أكثر في متغيرات البيئة من خلال
JAVA_TOOL_OPTIONS
. تتضمن خيارات إعداد الذاكرة القيم التالية:-XX:MaxRAMPercentage
-XX:MinRAMPercentage
-XX:InitialRAMPercentage
-XX:MaxMetaspaceSize
-XX:MetaspaceSize
-XX:ReservedCodeCacheSize
-XX:MaxDirectMemorySize
-Xmx
-Xms
-Xss
على سبيل المثال، يتم تعطيل ملاءمة الذاكرة تلقائيا إذا قمت بتحديد الحد الأقصى لحجم كومة الذاكرة المؤقتة في متغير بيئة كما هو موضح في المثال التالي:
az containerapp update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --image <CONTAINER_IMAGE_LOCATION> \ --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m"
مع تعطيل ملاءمة الذاكرة، سترى إخراج الرسالة التالية إلى السجل:
تعطيل ملاءمة ذاكرة jvm، السبب: استخدام الإعدادات المحددة في JAVA_TOOL_OPTIONS=-Xmx512m بدلا من ذلك التقطت JAVA_TOOL_OPTIONS: -Xmx512m
حجم الذاكرة الصغيرة غير كومة الذاكرة المؤقتة: حالات نادرة عندما يكون الحجم المحسوب لحجم كومة الذاكرة المؤقتة أو حجم الذاكرة المؤقتة صغيرا جدا (أقل من 200 ميغابايت).
التحقق من تمكين احتواء الذاكرة
افحص دفق السجل أثناء بدء التشغيل بحثا عن رسالة تشير إلى تكوين ذاكرة JVM المحسوب.
فيما يلي مثال لإخراج الرسالة أثناء بدء التشغيل.
تكوين ذاكرة JVM المحسوب: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (إجمالي الذاكرة: 2G، عدد مؤشرات الترابط: 250، عدد الفئات المحملة: 12924، غرفة الرأس: 0٪)
تم التقاط JAVA_TOOL_OPTIONS: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M
تكوين وقت التشغيل
يمكنك تعيين متغيرات البيئة للتأثير على سلوك ملاءمة الذاكرة.
عامل | الوحدة | مثال | الوصف |
---|---|---|---|
BPL_JVM_HEAD_ROOM |
النسبة المئوية | BPL_JVM_HEAD_ROOM=5 |
اترك مساحة الذاكرة للنظام استنادا إلى النسبة المئوية المحددة. |
BPL_JVM_THREAD_COUNT |
الرقم | BPL_JVM_THREAD_COUNT=200 |
الحد الأقصى المقدر لعدد مؤشرات الترابط. |
BPL_JVM_CLASS_ADJUSTMENT |
الرقم النسبة المئوية |
BPL_JVM_CLASS_ADJUSTMENT=10000 BPL_JVM_CLASS_ADJUSTMENT="10%" |
ضبط عدد فئات JVM حسب القيمة الصريحة أو النسبة المئوية. |
إشعار
لا يؤدي تغيير هذه المتغيرات إلى تعطيل ملاءمة الذاكرة التلقائية.
تحذير نفاد الذاكرة
إذا قررت تكوين إعدادات الذاكرة بنفسك، فإنك تواجه خطر مواجهة تحذير نفاد الذاكرة.
فيما يلي بعض الأسباب المحتملة وراء نفاد الذاكرة للحاوية:
ذاكرة كومة الذاكرة المؤقتة أكبر من إجمالي الذاكرة المتوفرة.
الذاكرة غير المسخنة أكبر من إجمالي الذاكرة المتوفرة.
ذاكرة كومة الذاكرة المؤقتة + الذاكرة غير الفارغة أكبر من إجمالي الذاكرة المتوفرة.
إذا نفدت ذاكرة الحاوية الخاصة بك، فستواجه التحذير التالي:
تحذير OOM: ذاكرة كومة الذاكرة المؤقتة 1200M أكبر من 1G المتاحة للتخصيص (-Xmx1200M)