السبب: فيما يلي شائع:
1. كمية البيانات المحملة في الذاكرة كبيرة جدًا ، مثل أخذ الكثير من البيانات من قاعدة البيانات في وقت واحد ؛
2. هناك إشارات إلى الكائنات في فئة التجميع ، ولم يتم مسحها بعد الاستخدام ، بحيث لا يمكن إعادة تدوير JVM ؛
3. هناك حلقات ميتة في الكود أو الحلقات التي تنتج الكثير من التكرار ؛
4. الأخطاء في برنامج الطرف الثالث المستخدمة ؛
5. يتم تعيين قيمة الذاكرة لمعلمة بدء التشغيل صغيرة جدًا ؛
مطالبات الخطأ الشائع:
1.Tomcat: java.lang.outofmemoryerror: Permgen Space
2.Tomcat: java.lang.outofmemoryerror: Java Heap Space
3. WeBlogic: السبب الجذري لـ ServleTexception java.lang.outofmemoryerror
4.resin: java.lang.outofmemoryerror
5.java: java.lang.outofmemoryerror
يحل:
1. حل للخطأ المدعوم بواسطة خادم التطبيق: اضبط قيمة الذاكرة لمعلمة بدء التشغيل لتكون كبيرة بما يكفي.
2. حلول للخطأ الناجم عن رمز Java: ركز على النقاط التالية:
1) تحقق مما إذا كانت هناك حلقات ميتة أو مكالمات متكررة في الكود.
2) تحقق مما إذا كانت هناك حلقة كبيرة تنتج مرارًا وتكرارًا كيانات كائنات جديدة.
3) تحقق مما إذا كان هناك استعلام حصل على جميع البيانات في استعلام قاعدة البيانات. بشكل عام ، إذا أخذت 100000 سجل في الذاكرة في وقت واحد ، فقد يتسبب ذلك في تجاوز الذاكرة. هذه المشكلة مخفية للغاية. قبل الاتصال بالإنترنت ، كان هناك بيانات أقل في قاعدة البيانات ولم يكن من السهل أن تواجه مشاكل. بعد الاتصال بالإنترنت ، كان هناك المزيد من البيانات في قاعدة البيانات ، وقد يتسبب استعلام واحد في تدفق الذاكرة. لذلك ، حاول استخدام ترقيم الصفحات للاستعلام عن استعلامات قاعدة البيانات.
4) تحقق مما إذا كانت كائنات التجميع مثل القائمة ، لم يتم مسح الخريطة بعد الاستخدام. سيكون لدى كائنات التجميع مثل القائمة والخريطة دائمًا إشارات إلى الكائنات ، مما يجعل هذه الكائنات غير قادرة على إعادة تدويرها بواسطة GC.
قضية:
1. عند استفادة بيانات السبات ، فإنه يتكلم الكثير من البيانات في وقت واحد. في وقت لاحق ، يتم تعديل الرمز في هذا الجزء ، ويتم استرداد الكمية المحددة فقط من البيانات في وقت واحد ، وحل المشكلة بنجاح. 2. عند إجراء اختبارات الإجهاد ، تظهر OutofMemoryerror ووجد أنه لم يتم إصدار مورد الجلسة. من الأفضل إصدار مورد الجلسة من خلال طريقة إبطال () للجلسة.
3. تظهر حلقة ميتة في البرنامج.
4. يظهر OutofMemoryError عند نشر Tomcat وتشغيله ، ويتم زيادة قيمة معلمة الذاكرة لحل هذه المشكلة.
java.lang.outofmemoryerror
1. حجم الكومة تشير إعدادات كومة JVM إلى إعدادات مساحة الذاكرة التي يمكن لـ JVM توفيرها أثناء تشغيل برنامج Java. عند بدء تشغيل JVM ، سيتم تعيين قيمة حجم الكومة تلقائيًا. مساحتها الأولية (أي -xms) هي 1/64 من الذاكرة الفعلية ، والحد الأقصى للمساحة (-xmx) هي 1/4 من الذاكرة الفعلية. يمكنك استخدام -xmn -xms -xmx والخيارات الأخرى التي توفرها JVM لتعيينها. حجم حجم الكومة هو مجموع الجيل الشاب والأجناس المُثبّنة. نصيحة: سيتم طرح رسالة الاستثناء هذه إذا تم استخدام 98 ٪ من الوقت في GC ويكون حجم الكومة المتاح أقل من 2 ٪. نصيحة: يجب ألا يتجاوز حجم الكومة الحد الأقصى 80 ٪ من الذاكرة الفعلية المتاحة. بشكل عام ، قم بتعيين خيارات -xms و -xmx على نفسه ، بينما -xmn هو 1/4 من قيمة -xmx.
2. الحل: قم بتعيين حجم الكومة يدويًا وتعديل tomcat_home/bin/catalina.sh إضافة السطر التالي إلى "echo" باستخدام catalina_base: $ catalina_base "": java_opts = " -server -xms800m -xmx800m -xx: maxnewsize = 256m"
java.lang.outofmemoryerror: استثناء الفضاء بيرجين في تومكات
1. مساحة بيرجن الاسم الكامل لمساحة بيرجن هو مساحة دائمة للجيل ، والتي تشير إلى منطقة التخزين الدائمة للذاكرة. يتم تخزين هذه القطعة من الذاكرة بشكل أساسي بواسطة JVM. سيتم وضع الفصل في مساحة بيرجن عند تحميله. يختلف عن مساحة الكومة حيث يتم تخزين مثيل الفصل (مثيل). لن تنظف GC (مجموعة القمامة) مساحة بيرجين خلال وقت تشغيل البرنامج الرئيسي. لذلك ، إذا كان هناك العديد من الفصول في التطبيق الخاص بك ، فمن المحتمل جدًا أن يحدث خطأ Permgen Space. يكون هذا الخطأ شائعًا عندما يكون خادم الويب precompiles JSP. إذا كنت تستخدم عددًا كبيرًا من الجرار الطرف الثالث ضمن تطبيق الويب الخاص بك ، فإن الحجم يتجاوز الحجم الافتراضي لـ JVM (4M) ، فسيتم إنشاء رسالة الخطأ هذه.
الحل: قم بتعيين حجم MaxPermsize يدويًا وتعديل Tomcat_home/bin/catalina.sh إضافة السطر التالي إلى "Echo" باستخدام Catalina_base: $ catalina_base "": فيما يتعلق بتحقيق الغرض من تقليل استخدام الذاكرة المتكرر لمستندات JAR.
java.lang.outofmemoryerror استثناء التعامل مع weblogic
موجه الخطأ: "السبب الجذري لـ ervletexception java.lang.outofmemoryerror"
الحل: اضبط المعلمات في commenv في bea/woblogic/common: sun إذا "٪ production_mode ٪" == "true" goto sun_prod_mode set java_vm = -client set mem_args = -xms256m -xmx512m -xx: maxpermsize = 256m set java_options = ٪ : sun_prod_mode set java_vm = -server set mem_args = -xms256m -xmx512m -xx: maxpermsize = 256m goto
java.lang.outofmemoryerror عندما يدير Eclipse jboss: معالجة استثناءات Permgen Space
عند تشغيل JBOSS في Eclipse ، إذا استغرق الأمر وقتًا طويلاً ، فأحيانًا java.lang.outofmemoryerror: خطأ في الفضاء. هذا حل لك:
1) انقر فوق السهم الصغير بجوار رمز التصحيح ؛
2) انقر فوق عنصر القائمة "تكوينات التصحيح ..." ؛
3) حدد "JBOSS V4.2 في LocalHost" تحت شجرة "الخادم العام" على اليسار ؛
4) انقر فوق علامة التبويب "الوسائط" على اليمين وأضفها في "وسيطات VM":
-dprogram.name = run.bat -djava.endorsed.dirs = "d:/jBOSS405/bin /../ lib/appered" -xms128m -xmx512m -xx: permsize = 64m -xx: maxpermsize = 256m
5) إذا قمت بتشغيل JBOSS في وضع سطر الأوامر أو انقر فوق "Run.Bat" مباشرة ، فيجب عليك تعديل خيارات JVM في ملف Bin/Run.conf ، والعثور على Java_opts = " -XMS128M -XMX512M ..." Paragraph ، ثم إضافة "-xx: Permsize = 64m -xx: maxpersizize = 256m. حفظها على ما يرام.
6) ملاحظة: يمكن ضبط الأرقام 128 و 512 و 64 و 256 وفقًا لتكوين جهازك ، ثم انقر فوق "تطبيق".
java.lang.outofmemoryerror استثناء التعامل مع الراتنج
السبب: يحدث هذا الخطأ لأن ذاكرة JVM الفعلية صغيرة جدًا. يحتوي جهاز Java Virtual على ذاكرة أقصى قدرها 64 ميغابايت فقط ، والتي قد لا تكون مشكلة أثناء التطوير وتصحيح الأخطاء ، لكنها بعيدة عن تلبية الاحتياجات في بيئات التطبيق الفعلية ما لم يكن تطبيقك صغيرًا جدًا وليس لديه وصول. وإلا فقد تجد خطأً في الحزمة java.lang.outofmemoryerror بعد تشغيل البرنامج لفترة من الوقت. لذلك ، نحتاج إلى زيادة حجم ذاكرة الجهاز الظاهري المتاحة للخزان.
الحل: قم بتعديل خيار args في /usr/local/resin/bin/httpd.sh لإضافة معلمات -xms (الذاكرة الأولية) و -xmx (يمكن استخدام حجم الذاكرة القصوى) والتي يمكن استخدامها للحد من استخدام الذاكرة الفعلية لـ JVM. على سبيل المثال: بعد إعداد args = " -XMS128M -XMX256M" ، فإن الذاكرة الفعلية الأولية لـ JVM هي 128 مترًا ، ويمكن استخدام الحد الأقصى للذاكرة الفعلية 256 مترًا. يجب تعيين هاتين القيمتين من قبل مسؤول النظام وفقًا للوضع الفعلي للخادم.
ما سبق هو المحتوى الكامل للحل الأمثل لمشكلة التعامل مع الأخطاء في java.lang.outofmemoryerror التي أحضرها إليك. آمل أن يدعم الجميع wulin.com ~