يقدم هذا القسم فقط الجزء القتالي الفعلي. لمعلمات نظرية محددة ، يرجى بايدو.
الأدوات المطلوبة: Linux Server Jmeter Test Tool Xshell تطبيق الويب
يمكن تكوين معلمات JVM من Tomcat في Catalina.sh ، وإذا كانت على النافذة ، فيمكنك تكوين ملف .bat.
التكوين 1:
قمت هنا بتكوين مسار سجل GC كـ/home/log/gc.log لطباعة سجل GC ، ويتم ضبط الكومة الأولية وذاكرة الكومة القصوى على 50 مترًا ، وعندما يتم فطلة ملف تفريغ الإخراج ، فإنه يستخدم جامع القمامة التسلسلي ، وحجم الجيل الدائم 50 مترًا.
ضع تطبيق الويب في الدليل المقابل ، وتكوين server.xml (لم يتم تقديم التكوين هنا) ، وابدأ Tomcat.
يتم إجراء اختبار الإنتاجية باستخدام أداة اختبار الضغط (JMeter). يمكن للطلاب الذين لم يستخدموها أبدًا تنزيله وتعلمه على الموقع الرسمي http://jmeter.apache.org/
قم بإنشاء مجموعة مستخدم (10 مؤشرات ترابط ، كل مؤشر ترابط يطلب 1000 مرة) ، قم بإعداد معلومات طلب HTTP ، وإنشاء تقرير إجمالي وسجل GC
دعنا نلقي نظرة على سجل GC أولاً:
GC الكامل على الشاشة ، تحقق أخيرًا من التقرير الكلي:
يتم الحفاظ على الإنتاجية في 122.7 في الثانية. من هذه الحالة ، يمكننا أن نرى أن الجيل القديم ممتلئ بشكل أساسي ، وبعد FullGC ، سيكون للجيل الجديد القليل من اليسار. بشكل عام ، يعد وقت الإيقاف المؤقت لـ GC الكامل هو الأطول ويحدث بشكل متكرر ، ومن الواضح أن مثل هذا التكوين غير معقول.
التكوين 2:
يزيد هذا التكوين بشكل أساسي من أقصى قدر من ذاكرة الكومة. من أجل توسيع الجهاز الظاهري تلقائيًا والحصول على حجم ذاكرة استقرار مستقر.
ما عليك سوى الانتباه إلى الحد الأقصى لذاكرة الكومة البالغة 82924 كيلو حوالي 80 مترًا ، مما يعني أن الجهاز الظاهري يوسع تلقائيًا ذاكرة الكومة إلى 80 مترًا وتثبتها. اختبار التكوين هذا هو مجرد العثور على ذاكرة كومة مستقرة للاختبار التالي.
التكوين الثالث:
اضبط الذاكرة الأولية للكومة بمقدار 128 مترًا.
من نتائج التكوين 2 ، يمكن ملاحظة أن ذاكرة الكومة مستقرة أخيرًا عند حوالي 80 مترًا ، لذلك من المحتمل أن تتسبب ذاكرة الكومة الأصغر من 80 مترًا في حدوث عدد كبير من تفاعلات GC ، لذلك قمت هنا بتعيين ذاكرة الكومة على 128 مترًا ، مما قد يقلل من عدد GCs.
يمكنك أن ترى أن الإنتاجية قد زادت قليلاً ، فقد انخفض عدد GCS بشكل كبير ، وأصبحت الفواصل الزمنية من GCS أطول.
التكوين 4:
يستخدم حاليًا إعادة التقييم Parallalgc ، وهو إعادة تدوير موازية متعددة مؤشرات الترابط.
تم تحسين الإنتاجية من إعادة التثبيت GC باستخدام MultiTerded بالتوازي بشكل طفيف. (Parallalgc و SerialGC لهما تأثير ضئيل على الإنتاجية دون ضغط GC.)
التكوين 5:
التكوين 6:
وفقًا لختام التكوين 3 ، سيحدث GC بشكل متكرر في ذاكرة الكومة أقل من 80 مترًا. بالاقتران مع الاستنتاج الذي تم الحصول عليه في التكوين 4 ، عندما يكون هناك ضغط GC معين ، فإن إنتاجية الموازية و SerialGC ستظهر بعض الاختلافات. إذا تم تكوين ذاكرة الكومة من 5 و 6 بـ 64 مترًا <80m ، فسيحدث GC المتكرر. عند استخدام شركات إعادة التدوير المختلفة لـ GC ، سيكون هناك اختلاف كبير من الناحية النظرية في الإنتاجية ، ولكن لماذا لا يكون الفرق في تجربتي كبيرًا جدًا ، ولماذا؟ مهلا ، عائلتي فقيرة. يمكنني استخدام وحدة المعالجة المركزية ذات النواة الواحدة. في حالة أحادية النواة ، فإن تغييرات الأداء في ParallelGC ليست واضحة. ينصح SerialGC عندما تكون القدرات ذات النواة الواحدة أو المتوازية ضعيفة. يمكن للطلاب الذين لديهم الظروف تجربته مع خادم متعدد النواة!
التكوين 7:
حاول استخدام parnewgc. يستخدم الجيل الجديد parnewgc لإعادة التدوير ، في حين أن الجيل القديم لا يزال يستخدم SerialGC لإعادة التدوير. ترى كيف الأداء؟
إنه يتمتع بأداء أفضل من استخدام كل عملية إعادة التسلسل ، ولكن الأداء الأسوأ من استخدام إعادة التكرار المتوازية جميعًا.
بالإضافة إلى ذلك ، قد تؤدي ترقية إصدار JDK أيضًا إلى تحسين الأداء قليلاً ، ولكن ترقية إصدار JDK تأتي مع مخاطر معينة ، وقد يتم إدخال بعض الأخطاء غير المعروفة في الإصدار الجديد من JDK.
أخيرًا ، أدرجت بعض معلمات تكوين JVM شائعة الاستخدام للرجوع إليها:
1. المعلمات المتعلقة بفترة الاسترداد التسلسلية
• -xx:+useerialgc: استخدم جامعي المسلسل في الأجيال الجديدة والقديمة
• -xx: Survivorratio: اضبط حجم منطقة عدن ونسبة منطقة الناجين
• -xx: intenuresizeThreshold: اضبط العتبة للكائنات الكبيرة لدخول الشيخوخة مباشرة. عندما يتجاوز حجم الكائن هذه القيمة ، سيتم تخصيصه مباشرة في الشيخوخة
• -xx: MaxtenureingThreshold: يحدد الحد الأقصى لقيمة العمر للكائن الذي يدخل الشيخوخة. بعد كل GC ثانوي ، يتم إضافة عمر الموضوع بواسطة 1. أي كائن أكبر من هذا العمر سيدخل بالتأكيد الشيخوخة.
2. المعلمات المتوازية GC
• -xx:+usparnewgc: استخدم جامعي متوازيين في الجيل الجديد.
• -xx:+usteparalleloldgc: استخدم جامعي متوازيين في الشيخوخة
• -xx:+parallections: يضبط عدد المواضيع المستخدمة لجمع القمامة ، والتي يمكن أن تكون عادةً مساوًا لعدد وحدات المعالجة المركزية. عندما يكون هناك عدد كبير من وحدات المعالجة المركزية ، من الممكن أيضًا تعيين قيمة صغيرة نسبيًا.
• -xx:+maxgcpausemillis: قم بتعيين الحد الأقصى لوقت الإيقاف المؤقت لجمع القمامة. قيمتها هي عدد صحيح أكبر من 0. عندما يعمل جامع ، فإنه سيعدل حجم كومة Java أو بعض المعلمات الأخرى ، والتحكم في وقت الإيقاف المؤقت إلى MaxgCpausemillis قدر الإمكان.
• -xx: +UseadaptivesizePolicy: قم بتشغيل استراتيجية GC التكيفية. في هذا الوضع ، سيتم تعديل المعلمات مثل حجم الجيل الجديد ونسبة الناجين ، وعمر الكائن في الجيل القديم تلقائيًا لتحقيق نقطة التوازن بين حجم الكومة والإنتاجية والتوقف.
• -xx:+gctimeratio: اضبط حجم الإنتاجية. قيمتها هي شهادة ما بين 0 و 100. على افتراض أن قيمة gctimeratio هي n ، لن ينفق النظام أكثر من 1/(1+n) من الوقت على جمع القمامة.
3. المعلمات المتعلقة بجامع CMS
• -xx:+UseconCmarksWeepGC: يستخدم الجيل الجديد جامعي متوازيين ، بينما يستخدم الجيل القديم جامعي CMS+Serial.
• -xx: ParallelCmsThreads: اضبط عدد المواضيع لـ CMS.
• -xx: CMSInitiAtingOccupancyFraction: قم بتعيين كمية جامع CMS يتم تشغيلها بعد استخدام مساحة الشيخوخة ، الافتراضي 68 ٪
• -xx: usecmscompactatuplCollection: اضبط ما إذا كان CMS بحاجة إلى تحرير مرة واحدة بعد الانتهاء من مجموعة القمامة
• -xx: cmsfullgcbeforeCompaction: قم بتعيين عدد المرات التي يتم فيها إجراء مجموعة Garbage CMS ، ويتم تنفيذ ضغط الذاكرة.
• -xx:+cmclassunloadingEnabled: يسمح باستعادة بيانات التعريف الفئة
• -xx: CMSInitiAtingperMoccupancyFraction: عندما تصل نسبة الإشغال الدائمة إلى هذه النسبة ، يتم تنشيط استرداد CMS (شريطة أن يتم تنشيط -xx:+cmclassunloadingenabled)
• -xx: usecmsinitiatingoccupancyonly: يعني أن استرداد CMS يتم تنفيذه فقط عند الوصول إلى العتبة.
• -xx:+cmsincrementalmode: استخدم الوضع الإضافي ، والذي يعد أكثر ملاءمة لوحدة المعالجة المركزية الفردية. يتم تمييز الوضع الإضافي على أنه تم التخلص منه في الوسط ، وسيتم إزالته بالكامل في JDK9.
4. المعلمات المتعلقة بفترة استرداد G1
• -xx:+useg1gc: استخدم استرداد G1
• -xx:+maxgcpausemillis: اضبط الحد الأقصى لوقت الإيقاف المؤقت لجمع القمامة
• -xx:+gcpauseintervalmillis: اضبط الفاصل الزمني للتوقف مؤقتًا.
5. TLAB ذات الصلة
• -xx:+USETLAB: قم بتشغيل تخصيص TLAB.
• -xx:+printtlab: طباعة معلومات التخصيص المتعلقة بـ TLAB
• -xx: tlabsize: ضبط حجم tlab
• -xx:+resizetlab: ضبط حجم TLAB تلقائيًا
6. بعض المعلمات الأخرى
• -xx:+disablexplicitgc: تعطيل GC الصريح
• -xx:+explictgcinvokeSconCurrent: استخدم التزامن للتعامل مع GC الصريح
إن أداء JVM Tomcat العملي أعلاه (الموصى به) هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.