"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > AWS SnapStart - قياس الجزء البارد والدافئ يبدأ باستخدام Java باستخدام خوارزميات مختلفة لجمع البيانات المهملة

AWS SnapStart - قياس الجزء البارد والدافئ يبدأ باستخدام Java باستخدام خوارزميات مختلفة لجمع البيانات المهملة

تم النشر بتاريخ 2024-11-01
تصفح:939

AWS SnapStart - Part Measuring cold and warm starts with Java using different garbage collection algorithms

مقدمة

في الأجزاء السابقة من سلسلتنا، قمنا بقياس عمليات التشغيل الباردة لوظيفة Lambda مع وقت تشغيل Java 21 دون تمكين SnapStart، مع تمكين SnapStart وقمنا أيضًا بتطبيق تحسين إعداد استدعاء DynamoDB باستخدام إعدادات ذاكرة Lambda المختلفة، وأحجام عناصر نشر Lambda، وJava خيارات التجميع، (أ) عملاء HTTP المتزامنين واستخدام طبقات Lambda المختلفة. لجميع هذه القياسات استخدمنا خوارزميات جمع البيانات المهملة الافتراضية G1.

في هذه المقالة، نود استكشاف تأثير خوارزميات تجميع البيانات المهملة في Java على أداء وظيفة Lambda مع وقت تشغيل Java 21. سنقوم أيضًا بإعادة قياس كل شيء حتى يحصل G1 على نتائج قابلة للمقارنة مع نفس إصدار Java 21 البسيط المستخدم لجميع خوارزميات جمع البيانات المهملة.

خوارزميات جمع البيانات المهملة جافا

بالنسبة لقياساتنا، سنستخدم خوارزميات مجموعة Java التالية مع إعدادها الافتراضي (يرجى الرجوع إلى الوثائق المرتبطة للحصول على معلومات أكثر تفصيلاً حول كل خوارزمية):

  • جامع القمامة الأول (G1). هذه هي خوارزمية جمع البيانات المهملة المستخدمة بشكل افتراضي. يمكنك تعيينه بشكل صريح في قالب AWS SAM عن طريق إضافة -XX: UseG1GC إلى متغير البيئة JAVA_TOOL_OPTIONS.
  • الجامع الموازي. يمكنك تعيينه بشكل صريح في قالب AWS SAM عن طريق إضافة -XX: UseParallelGC إلى متغير البيئة JAVA_TOOL_OPTIONS.
  • شيناندواه جي سي. لا توفر Oracle JDK هذه الميزة، ولكن Amazon Corretto 21 JDK توفرها. يمكنك تعيينه بشكل صريح في قالب AWS SAM عن طريق إضافة -XX: UseShenandoahGC إلى متغير البيئة JAVA_TOOL_OPTIONS.
  • جامع القمامة Z. هناك خوارزميتان مختلفتان لـ ZGC: الافتراضية والجيل الأحدث. يمكنك تعيينه بشكل صريح في قالب AWS SAM عن طريق إضافة -XX: UseZGC أو -XX: UseZGC -XX: ZGenerational إلى متغير البيئة JAVA_TOOL_OPTIONS.

يبدأ قياس البرودة والدفء مع Java 21 باستخدام خوارزميات مختلفة لجمع البيانات المهملة

في تجربتنا، سنستخدم تطبيقًا معدلاً قليلاً تم تقديمه في الجزء 9. يمكنك العثور على رمز التطبيق هنا. توجد في الأساس وظيفتان من وظائف Lambda تستجيب كل منهما لطلبات بوابة API وتسترد المنتج عن طريق المعرف المستلم من بوابة API من DynamoDB. يمكن استخدام وظيفة Lambda واحدة GetProductByIdWithPureJava21LambdaWithGCAlg مع SnapStart وبدونه، بينما تستخدم الوظيفة الثانية GetProductByIdWithPureJava21LambdaAndPrimingWithGCAlg تحضير طلب SnapStart وDynamoDB.

اعتمدت نتائج التجربة أدناه على إعادة إنتاج أكثر من 100 درجة حرارة باردة وحوالي 100.000 نقطة دافئة مع تجربة استمرت لمدة ساعة تقريبًا. من أجل ذلك (والتجارب من مقالتي السابقة) استخدمت أداة اختبار التحميل، لكن يمكنك استخدام أي أداة تريدها، مثل Serverless-artillery أو Postman. نحن نجري تجارب من خلال منح وظائف Lambda ذاكرة تبلغ 1024 ميجابايت واستخدام JAVA_TOOL_OPTIONS: "-XX: TieredCompilation -XX:TieredStopAtLevel=1" (تجميع عميل Java دون إنشاء ملفات تعريف) والذي يتميز بمفاضلة جيدة جدًا بين أوقات البدء الباردة والدافئة.

لسوء الحظ لم أتمكن من بدء وظيفة Lambda مع ظهور الخطأ في The Z Garbage Collector (مع كل من الافتراضي والجيل):

Failed to commit memory (Operation not permitted)
[error][gc] Forced to lower max Java heap size from 872M(100%) to 0M(0%)
[error][gc] Failed to allocate initial Java heap (512M)
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

لقد جرب إعداد ذاكرة أكبر مثل 1024 مثل 2048 ميجا بايت وحتى المزيد من ميجا بايت، ولكن لا يزال نفس الخطأ يظهر.

دعونا نلقي نظرة على نتائج قياساتنا مع 3 خوارزميات أخرى لجمع البيانات المهملة.

الاختصار c للبداية الباردة وw للبداية الدافئة.

وقت البدء البارد (ج) والدافئ (ث) بدون تمكين SnapStart بالمللي ثانية:

خوارزمية GC ج ص50 ج ص 75 ج ص90 ج ص99 ج ص99.9 ج ماكس ث ص50 ث ص 75 ث ص90 ث ص99 ث ص99.9 ث ماكس
G1 3655.17 3725.25 3811.88 4019.25 4027.30 4027.83 5.46 6.10 7.10 16.79 48.06 1929.79
المجمع الموازي 3714.10 3789.09 3857.87 3959.44 4075.89 4078.25 5.55 6.20 7.10 15.38 130.13 2017.92
شيناندواه 3963.40 4019.25 4096.30 4221.00 4388.78 4390.76 5.82 6.45 7.39 17.06 71.02 2159.21

وقت البدء البارد (ج) والدافئ (ث) مع تمكين SnapStart بدون التمهيدي بالمللي ثانية:

خوارزمية GC ج ص50 ج ص 75 ج ص90 ج ص99 ج ص99.9 ج ماكس ث ص50 ث ص 75 ث ص90 ث ص99 ث ص99.9 ث ماكس
G1 1867.27 1935.68 2152.02 2416.57 2426.25 2427.35 5.47 6.11 7.05 17.41 51.24 1522.04
المجمع الموازي 1990.62 2047.12 2202.07 2402.12 2418.99 2419.32 5.68 6.35 7.45 18.04 147.83 1577.21
شيناندواه 2195.47 2301.07 2563.37 3004.89 3029.01 3030.36 5.73 6.41 7.51 17.97 75.00 1843.34

وقت البدء البارد (c) والدافئ (w) مع تمكين SnapStart ومع استدعاء DynamoDB التمهيدي بالمللي ثانية:

خوارزمية GCج ص50ج ص 75ج ص90ج ص99ج ص99.9ج ماكسث ص50ث ص 75ث ص90ث ص99ث ص99.9ث ماكسG1833.50875.341089.531205.261269.561269.85.466.107.1616.3946.19499.13المجمع الموازي900.18975.121058.411141.941253.171253.995.826.617.7516.8749.64487.73شيناندواه1065.841131.711331.961473.441553.591554.955.776.407.3917.2065.06500.48
خاتمة

استكشفنا في هذه المقالة تأثير خوارزميات جمع البيانات المهملة في Java (G1 وParallel Collector وShenandoah) على أداء وظيفة Lambda في وقت تشغيل Java 21. لقد رأينا اختلافًا كبيرًا بين أداء تلك الخوارزميات. باستخدام الإعدادات الافتراضية مع G1 (الإعداد الافتراضي)، فإننا نواجه (أحيانًا إلى حد بعيد) أقل أوقات البدء الباردة والدافئة. باستخدام SnapStart مع إعداد طلب DynamoDB، تكون نتائج الأداء أقرب إلى بعضها البعض كما هو متوقع.

يرجى الرجوع إلى وثائق كل خوارزمية جمع البيانات المهملة لضبط الإعدادات مثل المزيج والحد الأقصى للذاكرة التي يمكن أن توفر تحسنًا كبيرًا في الأداء وإجراء القياسات الخاصة بك.

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/aws-builders/aws-snapstart-part-26-meaturing-cold-and-warm-with-java-21-using-different-garbage- collections-algorithms-8h3؟1 إذا كان هناك أي تعدي على [email protected].
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3