مثل أي مزود خدمات معلومات ملائم ، نحن نفهم أن وقت استجابة النظام هو عامل مهم للغاية لخلق تجربة مستخدم إيجابية. بالإضافة إلى ذلك ، تجعل سرعة التشغيل العالية من استخدام قدرات الخادم أكثر كثافة ، وبالتالي تقليل تكلفة مركز البيانات.
ولكن هناك واحد "لكن":
CRM لدينا
- SalesMax - مكتوب بلغة جافا ، وبالتالي ، تحدث
الإيقاف المؤقت المرتبط بعمل جامع القمامة بشكل دوري. حتى وقت قريب ، كان هذا الشر الذي لا مفر منه والذي كان عليك تحمله.
وهكذا ، أعلنت أوراكل عن جامع جديد للقمامة - ZGC. وفقًا للإعلانات الأولية ، كان من المفترض أن يحل مشكلة تجميد تطبيق java - يجب ألا تتجاوز فترات التوقف المعلنة 100 مللي ثانية حتى على أكوام متعددة غيغا بايت. مع أقصى استخدام للذاكرة بسعة 6 جيجابايت ، يجب أن يكون كل شيء على ما يرام.
لذلك دعونا نبدأ.
أضف السطر إلى standalone.conf لخادم تطبيق wildfly
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseZGC"
نبدأ النظام ، تشغيل اختبارات الحمل.
للوهلة الأولى ، كل شيء يعمل كما هو مذكور ، وتوقف مؤقتا لجمع القمامة حقا.
وبدون تردد ، تقرر تجربة أداة تجميع مجمعي بيانات جديدة على أحد خوادم المنتج. اخترنا الأقل تحميل ، تكوين ، أطلقت ، بدأت في مراقبة.
في البداية ، كل شيء سار بشكل جيد ، بشكل عام ، قرروا أن التجربة كانت ناجحة.
وهكذا ، ليلة السبت. نحن نلعب البلياردو بهدوء ، بعد منتصف الليل. دعوة من المدير: CRM لا يعمل للعميل.
تحقق - العميل من نفس الخادم. أضع الهاتف في يدي ، افتح Termius ، وحاول الاتصال بالخادم عبر ssh - silence ... بالكاد قليلاً ، بعد حوالي 20 ثانية ، والذي بدا في تلك اللحظة وكأنه إلى الأبد ، لكنني ما زلت أستطيع الدخول. وماذا نرى؟ على الرغم من قيود -Xmx6144M التي تم تعيينها في معلمات بدء التشغيل ، فإن عملية java تستهلك كل الذاكرة المتوفرة. بعد مرور بعض الوقت ، قتل النظام هذه العملية بالكامل.
لذلك ، كان استخدام ZGC ليتم تعطيله. عاد عمل نظام CRM إلى حالته الطبيعية. يبدو أنه لا يوجد شيء نفعله ، سننتظر حتى ينتهي كل شيء في Oracle.
لكن ، بعد مرور بعض الوقت ،
لفتت مقالة انتباهي إلى المؤلف ، حيث شارك المؤلف التجربة الإيجابية في استخدام أداة تجميع أخرى للقمامة - Shenandoah ، التي كان لمطورها نفس الأهداف تمامًا ، وهي: تقليل الوقت الذي تستغرقه المرحلة العالمية في أداة تجميع النفايات.
قررنا: لم لا؟
بعد العثور على الصفحة التي يمكنك من خلالها تنزيل JDK المترجمة مسبقًا -
https://builds.shipilev.net/ ، بدأنا الاختبار: نضيف مفاتيح جديدة إلى standalone.conf:
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC"
هذه المرة ، أظهر الاختبار أن كل شيء ، بشكل عام ، على ما يرام. تم تقليل الإيقاف المؤقت لجمع البيانات المهملة ، والأهم من ذلك كله أن الزيادة غير المتوقعة في استهلاك الذاكرة توقفت. كل شيء يعمل فقط الكمال في الإنتاج.
ما هي الاستنتاجات التي يمكن استخلاصها؟ أدرك أن Oracle تعمل أيضًا على تطويرها ، وأن الصعوبات التي واجهناها في أكتوبر 2019 قد تم إصلاحها بالفعل ، وسيتم منح ZGC قريبًا فرصة ثانية. لكن في الوقت الحالي ، شخصياً ، اخترنا Shenandoah GC ، ولم نندم على ذلك.