1. جمع مشكلات إعدادات ذاكرة Tomcat
عند استخدام برامج JAVA للاستعلام عن كمية كبيرة من البيانات من قاعدة البيانات أو تحميل حزمة JAR بواسطة خوادم التطبيق (مثل Tomcat ، JBoss ، WebLogic) ستظهر. سيظهر استثناء java.lang.outofmemoryerror. يحدث هذا بشكل أساسي بسبب عدم كفاية الذاكرة في خادم التطبيق. غالبًا ما يحتوي هذا الاستثناء على المواقف التالية (مع أخذ بيئة Tomcat كمثال ، خوادم الويب الأخرى مثل JBoss و Weblogic وما إلى ذلك هي نفسها):
1. java.lang.outofmemoryerror: Permgen Space
الاسم الكامل لمساحة Permgen هو مساحة توليد دائم ، والتي تشير إلى منطقة التخزين الدائمة في الذاكرة OutOfMemoryError: Permgen Space. من منظور النص ، يكون تفوق الذاكرة ، والحل هو زيادة الذاكرة. لماذا يفيض الذاكرة؟ هذا لأن هذه الذاكرة مخزنة بشكل أساسي من قبل JVM في الفصل والمعلومات التعريف. يتم وضع الفصل في منطقة Permgen Space عند تحميله. يختلف عن منطقة الكومة حيث يتم تخزين المثيل. لن تقوم GC (مجموعة القمامة) بتنظيف مساحة بيرجين خلال تشغيل البرنامج الرئيسي. لذلك ، إذا كان تطبيقك سيقوم بتحميل الكثير من الفصل ، فمن المحتمل جدًا أن يحدث خطأ في مساحة Permgen. يكون هذا الخطأ شائعًا عندما يقوم خادم الويب بتجميع JSP مسبقًا. إذا كنت تستخدم عددًا كبيرًا من الجرار الطرف الثالث ضمن تطبيق الويب الخاص بك ، فإن الحجم يتجاوز الحجم الافتراضي لـ JVM (4M) ، فسيتم إنشاء رسالة الخطأ هذه.
الحل: اضبط حجم maxpermsize يدويًا
أ. إذا تم بدء تشغيل Tomcat في وضع الخفافيش ، فإن الإعدادات التالية هي:
تعديل tomcat_home/bin/catalina.sh
أضف السطر التالي إلى "Echo" باستخدام Catalina_base: $ catalina_base ":
Java_opts = " -Server -xx: permsize = 64m -xx: maxpermsize = 128m
ب. إذا تم تسجيل Tomcat كخدمة Windows وبدأت في الخدمات ، فيجب تعديل القيمة الرئيسية المقابلة في السجل.
افتح التسجيل وابحث عن دليل HKEY_LOCAL_MACHINE/SOFTWARE/APACHE FOUNDATION/PROCRUN 2.0/HTFTY/PARAMETERS/JAVA. يجب تعديل علامة RED (مثل HTFTY) في عنوان الدليل وفقًا لمواقف مختلفة ، وتسجيل خدمة Tomcat كاسم لخدمة Windows. يمكنك رؤية عناصر JVMMS و JVMMX ، حيث تحدد JVMMs أصغر معلمات استخدام الذاكرة ، ويقوم JVMMX بتعيين أكبر معلمات استخدام الذاكرة. قم بتعيين قيم عناصر JVMMS و JVMMX ، وأعد تشغيل خادم Tomcat ليصبح مفيدًا.
التوصية: انقل نفس ملف جرة الطرف الثالث إلى دليل Tomcat/Service/Lib ، وذلك لتقليل استخدام الذاكرة المتكرر لمستندات JAR.
2. java.lang.outofmemoryerror: مساحة كومة جافا
تشير إعدادات كومة JVM إلى إعدادات مساحة الذاكرة التي يمكن لـ JVM توفيرها أثناء عملية برنامج Java. عند بدء تشغيل JVM ، سيتم تعيين قيمة حجم الكومة تلقائيًا. مساحتها الأولية (أي -xms) هي 1/64 من الذاكرة الفعلية ، والحد الأقصى للمساحة (-xmx) هي 1/4 من الذاكرة الفعلية. يمكنك استخدام -xmn -xms -xmx والخيارات الأخرى التي توفرها JVM لتعيينها. حجم حجم الكومة هو مجموع الجيل الشاب والأجناس المُثبّنة. سيتم طرح رسالة الاستثناء هذه إذا تم استخدام 98 ٪ من الوقت في GC ويكون حجم الكومة المتاح أقل من 2 ٪.
الحل: اضبط حجم الكومة يدويًا
أ. إذا تم بدء تشغيل Tomcat في وضع الخفافيش ، فإن الإعدادات التالية هي:
تعديل tomcat_home/bin/catalina.sh
أضف السطر التالي إلى "Echo" باستخدام Catalina_base: $ catalina_base ":
java_opts = " -server -xms800m -xmx800m -xx: maxnewsize = 256m"
ب. إذا تم تسجيل Tomcat كخدمة Windows وبدأت في الخدمات ، فيجب تعديل القيمة الرئيسية المقابلة في السجل.
افتح التسجيل وابحث عن دليل HKEY_LOCAL_MACHINE/SOFTWARE/APACHE FOUNDATION/PROCRUN 2.0/HTFTY/PARAMETERS/JAVA. يجب تعديل علامة RED (مثل HTFTY) في عنوان الدليل وفقًا لمواقف مختلفة ، وتسجيل خدمة Tomcat كاسم لخدمة Windows. يمكنك رؤية عناصر JVMMS و JVMMX ، حيث تحدد JVMMs أصغر معلمات استخدام الذاكرة ، ويقوم JVMMX بتعيين أكبر معلمات استخدام الذاكرة. قم بتعيين قيم عناصر JVMMS و JVMMX ، وأعد تشغيل خادم Tomcat ليصبح مفيدًا.
نصيحة: يجب ألا يتجاوز حجم الكومة الحد الأقصى 80 ٪ من الذاكرة الفعلية المتاحة. بشكل عام ، قم بتعيين خيارات -xms و -xmx على نفسه ، بينما -xmn هو 1/4 من قيمة -xmx.
2. لا يمكن أن يعمل Tomcat نفسه مباشرة على الكمبيوتر ، ويحتاج إلى الاعتماد على نظام التشغيل استنادًا إلى الأجهزة وجهاز Java الظاهري. عند بدء تشغيل برنامج Java ، سيقوم JVM بتخصيص ذاكرة أولية وذاكرة أقصى للتطبيق. ستؤثر هذه الذاكرة الأولية والحد الأقصى للذاكرة على أداء البرنامج إلى حد ما. على سبيل المثال ، عندما يستخدم التطبيق الحد الأقصى للذاكرة ، يجب على JVM أولاً القيام بجمع القمامة وإطلاق بعض الذاكرة المحتلة. لذلك ، إذا كنت ترغب في ضبط الذاكرة الأولية والحد الأقصى لذاكرة Tomcat عند البدء ، فأنت بحاجة إلى إعلانها إلى JVM. بشكل عام ، يمكن لبرامج Java ضبط الذاكرة الأولية والحد الأقصى للذاكرة للتطبيق من خلال -xms -xmx عند التشغيل: يتم تعيين أحجام هاتين القيمتين عمومًا وفقًا للاحتياجات. ينفذ حجم كومة التهيئة حجم الذاكرة التي يطلبها الجهاز الظاهري إلى النظام عند بدء التشغيل. بشكل عام ، هذه المعلمة ليست مهمة. ومع ذلك ، فإن بعض التطبيقات سوف تشغل بسرعة المزيد من الذاكرة تحت الأحمال الكبيرة. في هذا الوقت ، هذه المعلمة مهمة للغاية. إذا تم ضبط الذاكرة المستخدمة على أن تكون صغيرة عند بدء تشغيل الجهاز الظاهري ويتم تهيئة العديد من الكائنات في هذه الحالة ، يجب على الجهاز الظاهري زيادة الذاكرة بشكل متكرر لتلبية الاستخدام. لهذا السبب ، قمنا عمومًا بتعيين -xms و -xmx ليكونوا بنفس الحجم ، وتقتصر القيمة القصوى للكومة على الذاكرة الفعلية المستخدمة من قبل النظام. بشكل عام ، ستستخدم التطبيقات ذات الكميات الكبيرة من البيانات كائنات مستمرة ، وقد ينمو استخدام الذاكرة بسرعة. عندما تتجاوز الذاكرة المطلوبة من قبل التطبيق الحد الأقصى لقيمة الكومة ، فإن الجهاز الظاهري سيؤدي إلى دفع فائض الذاكرة ويتسبب في تعطل خدمة التطبيق. لذلك ، يوصى عمومًا بتعيين أقصى قيمة للكومة إلى 80 ٪ من الحد الأقصى لقيمة الذاكرة المتاحة.
يمكن لـ Tomcat استخدام الذاكرة افتراضيًا هو 128 ميجابايت. في مشاريع التطبيقات الأكبر ، هذه الذاكرة ليست كافية وتحتاج إلى زيادة. هناك عدة طرق للاختيار:
الطريقة الأولى:
ضمن Windows ، في الملف /bin/catalina.bat ، UNIX ، أمام الملف /-bin/catalina.sh ، أضف الإعدادات التالية:
java_opts = '-xms 【تهيئة حجم الذاكرة】 -xmx 【الذاكرة القصوى التي يمكن استخدامها】'
يجب زيادة قيم هاتين المعلمتين. على سبيل المثال:
java_opts = ' -xms256m -xmx512m'
وهذا يعني أن ذاكرة التهيئة هي 256 ميجابايت وأن الحد الأقصى للذاكرة التي يمكن استخدامها هي 512 ميجابايت.
الطريقة الثانية: تعيين الاسم المتغير في البيئة المتغير: Java_opts valuient value: -xms512m -xmx512m
الطريقة الثالثة: تهدف أول طريقتين إلى الموقف الذي تكون فيه catalina.bat في دليل bin (مثل tomcat الذي يتم إلغاء ضغطه مباشرة ، وما إلى ذلك) ، ولكن بعض إصدارات التثبيت من tomcat لا تحتوي على catalina.bat. في هذا الوقت ، يمكن استخدام الطريقة التالية. بالطبع ، هذه الطريقة هي أيضًا الطريقة الأكثر عمومية: فتح tomcathome // bin // tomcat5w.exe ، انقر فوق علامة تبويب Java ، وستجد أن هناك عنصرين: تجمع الذاكرة الأولي ومجموعة تجمع الذاكرة القصوى. هذا هو حجم الذاكرة لإعداد التهيئة. تجمع الذاكرة القصوى هذا هو الحد الأقصى لحجم الذاكرة. بعد إعداد الإعداد ، اضغط على موافق وأعد تشغيل Tomcat. ستجد أن الذاكرة المتاحة لـ JVM في Tomcat قد تغيرت.
شيء آخر يجب مراعاته هو آلية جمع القمامة التي توفرها Java. يحدد حجم كومة الجهاز الظاهري وقت وتواتر إنفاق الجهاز الظاهري على جمع القمامة. ترتبط السرعة المقبولة لجمع القمامة بالتطبيق ويجب تعديلها عن طريق تحليل الوقت وتواتر جمع القمامة الفعلي. إذا كان حجم الكومة كبيرًا ، فسيكون جمع القمامة الكامل بطيئًا ، ولكن سيتم تقليل التردد. إذا قمت بإجراء حجم الكومة بما يتوافق مع احتياجات الذاكرة ، فستكون المجموعة الكاملة سريعة ، لكنها ستكون أكثر تواتراً. الغرض من تغيير حجم الكومة هو تقليل وقت جمع القمامة لزيادة معالجة طلبات العملاء في غضون وقت محدد. أثناء القياس ، من أجل ضمان أفضل أداء ، يجب أن يكون حجم الكومة كبيرًا لضمان عدم حدوث جمع القمامة أثناء عملية القياس بأكملها. إذا كان النظام يقضي الكثير من الوقت في جمع القمامة ، فقم بتقليل حجم الكومة. يجب ألا تتجاوز مجموعة القمامة الكاملة 3-5 ثوانٍ. إذا أصبح جمع القمامة عنق الزجاجة ، فيجب تحديد حجم الجيل ، يتم التحقق من الإخراج التفصيلي لجمع القمامة ، ويتم دراسة تأثير معلمات جمع القمامة على الأداء. بشكل عام ، يجب أن تستخدم 80 ٪ من الذاكرة المادية كحجم الكومة. عند إضافة المعالج ، تذكر زيادة الذاكرة ، لأنه يمكن تنفيذ المخصصات بالتوازي ، في حين أن جمع القمامة ليس بالتوازي.
شيء واحد يجب ملاحظة: من المستحسن تضييق الفرق بين أعلى قيمة وأدنى قيمة ، وإلا فإن الكثير من الذاكرة سوف تضيع. يتم زيادة أدنى قيمة ، ويمكن تعيين أعلى قيمة في الإرادة ، ولكن يجب أن تعتمد على الذاكرة الفعلية الفعلية. إذا كان إعداد الذاكرة كبيرًا جدًا ، على سبيل المثال ، يتم تعيين الحد الأقصى للذاكرة ، ولكن إذا لم يكن هناك ذاكرة متاحة 512 مترًا ، فلا يمكن بدء تشغيل Tomcat. قد يكون هناك موقف يتم فيه إعادة تدوير الذاكرة بواسطة النظام وإنهاء العملية.
الطريقة المذكورة أعلاه لتنفيذ تدفق ذاكرة Tomcat وتعديل الحجم هي كل المحتوى الذي شاركته معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.