سؤال

مؤخرا أنا واجهت هذا الخطأ في تطبيق ويب:

java.لانغ.OutOfMemoryError:PermGen الفضائية

انها نموذجية السبات/JPA + IceFaces/JSF التطبيق يعمل على هر 6 و JDK 1.6.يبدو أن هذا يمكن أن يحدث بعد نقل التطبيق عدة مرات.

ما هي أسباب ذلك وما الذي يمكن القيام به لتجنب ذلك ؟ كيف يمكنني حل المشكلة ؟

هل كانت مفيدة؟

المحلول

الحل هو إضافة هذه العلامات إلى JVM سطر الأوامر عند هر بدأت:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

يمكنك القيام بذلك عن طريق اغلاق هر الخدمة ، ثم الذهاب إلى هر/bin و تشغيل tomcat6w.exe.تحت عنوان "جافا" علامة التبويب ، إضافة إلى حجج "جافا" خيارات مربع.انقر فوق "موافق" ثم قم بإعادة تشغيل الخدمة.

إذا كنت تحصل على خطأ الخدمة المحددة غير موجودة كخدمة مثبتة يجب تشغيل:

tomcat6w //ES//servicename

حيث servicename هو اسم الملقم كما ينظر إليها في الخدمات.msc

المصدر:orx تعليق على اريك رشيقة إجابات.

نصائح أخرى

من الأفضل لك محاولة -XX:MaxPermSize=128M بدلا من -XX:MaxPermGen=128M.

أنا لا أستطيع أن أقول بدقة استخدام هذا تجمع الذاكرة ، ولكن عليها أن تفعل مع عدد من الطبقات تحميلها في JVM.(وبالتالي تمكين فئة التفريغ عن هر يمكن حل المشكلة.) إذا كان لديك تطبيقات يولد وتحضير دروس على المدى فإنه من المرجح أن تحتاج إلى تجمع الذاكرة أكبر من الافتراضي.

التطبيق server PermGen الأخطاء التي تحدث بعد عدة عمليات النشر هي الأكثر احتمالا بسبب الإشارات التي عقدها الحاوية في القديم الخاص بك تطبيقات' classloaders.على سبيل المثال, استخدام سجل مخصص فئة المستوى سوف يسبب المراجع التي ستعقد خلال التطبيق الملقم classloader.يمكنك الكشف عن هذه بين classloader التسريبات باستخدام الحديثة (JDK6+) JVM أدوات التحليل مثل jmap و jhat أن ننظر في الذي الطبقات يستمر عقد في التطبيق الخاص بك ، وإعادة تصميم أو القضاء على استخدامها.المشتبه بهم المعتادين هي قواعد بيانات قطع الاشجار وغيرها من قاعدة الإطار على مستوى المكتبات.

انظر Classloader التسريبات:اللعين "جافا.لانغ.OutOfMemoryError:PermGen الفضائية" استثناء, و لا سيما متابعة ما بعد.

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

الأسباب الشائعة OutofMemory في PermGen هو ClassLoader.كلما فئة يتم تحميلها في JVM ، جميع البيانات الوصفية ، جنبا إلى جنب مع Classloader, هو أبقى على PermGen المنطقة وأنها سوف تكون القمامة التي تم جمعها عندما Classloader التي حملوها على استعداد لجمع القمامة.في حالة Classloader قد تسرب الذاكرة من جميع الطبقات تحميلها من قبل أنها سوف تظل في الذاكرة وتسبب permGen outofmemory بمجرد تكرار ذلك عدة مرات.والمثال الكلاسيكي هو Java.لانغ.OutOfMemoryError:PermGen الفضائية في هر.

الآن هناك طريقتان لحل هذه:
1.العثور على سبب تسرب الذاكرة أو إذا كان هناك أي تسرب الذاكرة.
2.زيادة حجم PermGen الفضائية باستخدام JVM المعلمة -XX:MaxPermSize و -XX:PermSize.

يمكنك أيضا التحقق من 2 حل جافا.لانغ.OutOfMemoryError في جافا للحصول على مزيد من التفاصيل.

استخدام سطر الأوامر المعلمة -XX:MaxPermSize=128m الشمس JVM (من الواضح استبدال 128 على حجم ما تحتاجه).

محاولة -XX:MaxPermSize=256m و إذا ما استمر ، في محاولة -XX:MaxPermSize=512m

أنا وأضاف -XX: MaxPermSize = 128m (يمكنك التجربة التي يعمل بشكل أفضل) إلى VM الحجج كما أنا باستخدام eclipse ide.في معظم JVM ، الافتراضي PermSize حول 64MB والتي نفدت الذاكرة إذا كان هناك الكثير من الطبقات أو عدد كبير من السلاسل في المشروع.

بالنسبة الكسوف ، كما هو موضح في الجواب.

الخطوة 1 :انقر نقرا مزدوجا فوق خادم قط في خوادم علامة التبويب

enter image description here

الخطوة 2 : فتح إطلاق Conf و إضافة -XX: MaxPermSize = 128m إلى نهاية القائمة VM الوسائط.

enter image description here

لقد تم نطح رأسي ضد هذه المشكلة حين نشر إلغاء شبكة معقدة التطبيق أيضا فكرت في إضافة شرح و حل بي.

عندما نشر تطبيق على Apache Tomcat, جديد ClassLoader يتم إنشاء هذا التطبيق.ClassLoader ثم يستخدم لتحميل تطبيق كل الطبقات ، undeploy, كل شيء يجب أن ينتهي بشكل جيد.ومع ذلك ، في الواقع ليس بهذه البساطة.

واحد أو أكثر من الفئات التي تم إنشاؤها خلال تطبيق ويب حياة حاصل ثابت الإشارة التي في مكان ما على طول الخط ، المراجع ClassLoader.مرجعا هي في الأصل ساكنة ، أي كمية من جمع القمامة وتنظيف هذه الإشارة ما يصل ClassLoader جميع فئات تم تحميله هنا البقاء.

وبعد بضع redeploys نصادف OutOfMemoryError.

الآن وقد أصبح مشكلة خطيرة إلى حد ما.يمكنني التأكد من أن القط هو إعادة تشغيل بعد كل نقل ، ولكن أن يأخذ أسفل الملقم بأكمله بدلا من مجرد تطبيق بنود ، والتي غالبا ما تكون غير مجدية.

لذا بدلا من ذلك لقد وضعت الحل في التعليمات البرمجية التي تعمل على Apache Tomcat 6.0.أنا لم تختبر على أي تطبيق آخر خوادم, ويجب أن أؤكد على أن وهذا هو المرجح جدا عدم العمل بدون تعديل على أي ملقم التطبيق.

أود أيضا أن أقول أن أنا شخصيا أكره هذا القانون ، لا أحد يجب أن يكون استخدام هذا بمثابة "حل سريع" إذا كانت التعليمات البرمجية الموجودة يمكن تغيير الاستخدام السليم إيقاف التشغيل و تنظيف الطرق.المرة الوحيدة هذا ينبغي أن تستخدم إذا كان هناك خارجي مكتبة التعليمات البرمجية الخاصة بك تعتمد على (في حالتي ، كان عميل RADIUS) التي لا توفر وسيلة لتنظيف الخاصة ثابت المراجع.

على أي حال, مع رمز.هذا ينبغي أن تسمى عند نقطة حيث طلب إلغاء مثل بريمج هو تدمير الأسلوب أو (النهج الأفضل) أ ServletContextListener هو contextDestroyed الأسلوب.

//Get a list of all classes loaded by the current webapp classloader
WebappClassLoader classLoader = (WebappClassLoader) getClass().getClassLoader();
Field classLoaderClassesField = null;
Class clazz = WebappClassLoader.class;
while (classLoaderClassesField == null && clazz != null) {
    try {
        classLoaderClassesField = clazz.getDeclaredField("classes");
    } catch (Exception exception) {
        //do nothing
    }
    clazz = clazz.getSuperclass();
}
classLoaderClassesField.setAccessible(true);

List classes = new ArrayList((Vector)classLoaderClassesField.get(classLoader));

for (Object o : classes) {
    Class c = (Class)o;
    //Make sure you identify only the packages that are holding references to the classloader.
    //Allowing this code to clear all static references will result in all sorts
    //of horrible things (like java segfaulting).
    if (c.getName().startsWith("com.whatever")) {
        //Kill any static references within all these classes.
        for (Field f : c.getDeclaredFields()) {
            if (Modifier.isStatic(f.getModifiers())
                    && !Modifier.isFinal(f.getModifiers())
                    && !f.getType().isPrimitive()) {
                try {
                    f.setAccessible(true);
                    f.set(null, null);
                } catch (Exception exception) {
                    //Log the exception
                }
            }
        }
    }
}

classes.clear();

بدلا من ذلك, يمكنك التبديل إلى JRockit والتي التعامل مع permgen بشكل مختلف ثم الشمس jvm.هو عموما أفضل أداء.

http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html

1) زيادة PermGen حجم الذاكرة

أول شيء يمكن فعله هو جعل حجم الدائم الجيل كومة مساحة أكبر.هذا لا يمكن القيام به مع المعتاد –Xms(المجموعة الأولي حجم كومة الذاكرة المؤقتة) و –Xmx(تعيين الحد الأقصى حجم كومة الذاكرة المؤقتة) JVM الحجج ، حيث كما ذكر الدائم الجيل كومة مساحة منفصلة تماما عن العادية Java الفضاء ، و هذه الحجج تعيين مساحة هذا العادية Java الفضاء.ومع ذلك ، هناك حجج مماثلة التي يمكن استخدامها(على الأقل مع الشمس/OpenJDK jvms) لجعل حجم الدائم الجيل كومة أكبر:

 -XX:MaxPermSize=128m

الافتراضي هو 64m.

2) تمكين تجتاح

طريقة أخرى أن تأخذ الرعاية من ذلك هو السماح الطبقات إلى تفريغها حتى PermGen لا ينفذ أبدا:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

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

يمكنك العثور على تفاصيل هذا الخطأ.

http://faisalbhagat.blogspot.com/2014/09/java-outofmemoryerror-permgen.html

على java.lang.OutOfMemoryError: PermGen مساحة رسالة تشير إلى أن الجيل دائم مساحة في الذاكرة استنفدت.

أي تطبيقات جافا يسمح استخدام كمية محدودة من الذاكرة.المبلغ المحدد من الذاكرة الخاصة بك يمكن استخدام التطبيق المحدد أثناء بدء تشغيل التطبيق.

جافا الذاكرة تنقسم إلى مناطق مختلفة وهو ما يمكن ملاحظته في الصورة التالية:

enter image description here

Metaspace:جديد مساحة الذاكرة ولد

جدك 8 بؤرة JVM الآن باستخدام الذاكرة الأصلية من أجل تمثيل الطبقة الفوقية ويسمى Metaspace;على غرار أوراكل JRockit و IBM JVM هو.

والخبر السار هو أنه يعني لا أكثر java.lang.OutOfMemoryError: PermGen مساحة مشاكل و لا حاجة لك إلى ضبط ومراقبة هذه مساحة الذاكرة بعد الآن باستخدام Java_8_Download أو أعلى.

لدي مشكلة أننا نتحدث هنا عن بلدي السيناريو هو الكسوف-هيليوس + هر + jsf و ما كنت تفعله هو جعل نشر تطبيق بسيط إلى هر.كنت تظهر نفس المشكلة هنا حلها على النحو التالي.

في الكسوف الذهاب إلى خوادم علامة التبويب انقر نقرا مزدوجا فوق تسجيل الملقم في حالتي هر 7.0, يفتح لي ملف server العامة معلومات التسجيل.على القسم "معلومات عامة" انقر على الرابط "فتح التكوين إطلاق" هذا يفتح تنفيذ خيارات الملقم في الحجج التبويب في VM الحجج وأضاف في نهاية هذه اثنين إدخالات

-XX: MaxPermSize = 512m
-XX: PermSize = 512m

وعلى استعداد.

أبسط الجواب في هذه الأيام هو استخدام جافا 8.

لم تعد تحتفظ الذاكرة حصرا PermGen الفضائية ، مما يتيح PermGen الذاكرة co-الاختلاط مع منتظمة تجمع الذاكرة.

نضع في اعتبارنا أنه سيكون لديك لإزالة جميع غير القياسية -XXPermGen...=... JVM معلمات بدء التشغيل إذا كنت لا تريد جافا 8 إلى يشكون من أنهم لا تفعل أي شيء.

  1. فتح tomcat7w من هر بن دليل أو نوع رصد هر في القائمة ابدأ (أ كلفه يفتح نافذة مع مختلف خدمات المعلومات).
  2. في جافا خيارات النص المنطقة إلحاق هذا السطر:

    -XX:MaxPermSize=128m
    
  3. المجموعة الأولى تجمع الذاكرة 1024 (اختياري).
  4. تعيين الحد الأقصى تجمع الذاكرة 1024 (اختياري).
  5. انقر فوق "موافق".
  6. إعادة تشغيل هر الخدمة.

بيرم gen الفضاء الخطأ يحدث بسبب استخدام مساحة كبيرة نوعا ما ثم jvm توفير الفضاء إلى تنفيذ التعليمات البرمجية.أفضل حل لهذه المشكلة في أنظمة التشغيل UNIX هو تغيير بعض التكوين على باش الملف.الخطوات التالية لحل هذه المشكلة.

تشغيل الأوامر gedit .bashrc على المحطة.

إنشاء JAVA_OTPS متغير مع القيمة التالية:

export JAVA_OPTS="-XX:PermSize=256m -XX:MaxPermSize=512m"

حفظ الملف bash.تشغيل الأمر exec باش على المحطة.إعادة تشغيل الملقم.

آمل أن يكون هذا النهج سوف تعمل على مشكلتك.إذا كنت تستخدم جافا الإصدار أقل من 8 تحدث هذه المشكلة في بعض الأحيان.ولكن إذا كنت تستخدم جافا 8 المشكلة لم يحدث.

زيادة دائمة في حجم جيل أو التغيير والتبديل GC المعلمات لن يساعد إذا كان لديك الحقيقي تسرب الذاكرة.إذا كان التطبيق الخاص بك أو بعض مكتبة 3rd الطرف التي يستخدمها ، تسرب فئة لوادر الحقيقي الوحيد و الدائم الحل هو أن تجد هذا التسرب وإصلاحه.هناك عدد من الأدوات التي يمكن أن تساعدك على إحدى الأخيرة هو Plumbr, الذي قد صدر للتو نسخة جديدة مع القدرات المطلوبة.

أيضا إذا كنت تستخدم log4j في webapp, تحقق من هذه الفقرة في log4j الوثائق.

ويبدو أنه إذا كنت تستخدم PropertyConfigurator.configureAndWatch("log4j.properties"), أنت يسبب تسرب الذاكرة عند undeploy الخاص بك webapp.

لدي مجموعة من السبات+الكسوف RCP, حاولت استخدام -XX:MaxPermSize=512m و -XX:PermSize=512m و يبدو أن العمل بالنسبة لي.

مجموعة -XX:PermSize=64m -XX:MaxPermSize=128m.في وقت لاحق يمكنك أيضا محاولة زيادة MaxPermSize.الأمل في أنه سوف يعمل.نفس يعمل بالنسبة لي.الإعداد فقط MaxPermSize لم يعمل بالنسبة لي.

حاولت عدة إجابات و الشيء الوحيد الذي ما فعلت أخيرا العمل كان هذا التكوين المترجم المساعد في بوم:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <fork>true</fork>
        <meminitial>128m</meminitial>
        <maxmem>512m</maxmem>
        <source>1.6</source>
        <target>1.6</target>
        <!-- prevent PermGen space out of memory exception -->
        <!-- <argLine>-Xmx512m -XX:MaxPermSize=512m</argLine> -->
    </configuration>
</plugin>

نأمل أن يكون هذا أحد يساعد.

حل هذا بالنسبة لي كذلك ؛ بيد أنني لاحظت أن إعادة تشغيل بريمج مرات أسوأ بكثير, وذلك في حين كان أفضل في الإنتاج ، كان هذا النوع من السحب في التنمية.

تكوين الذاكرة يعتمد على طبيعة التطبيق الخاص بك.

ماذا تفعل ؟

ما هو مقدار المعاملات precessed?

كم البيانات هل أنت التحميل ؟

الخ.

الخ.

الخ

ربما تستطيع أن ملف التطبيق الخاص بك والبدء في تنظيف بعض وحدات من التطبيق الخاص بك.

يبدو أن هذا يمكن أن يحدث بعد نقل التطبيق عدة مرات

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

يقولون أن أحدث rev من هر (6.0.28 أو 6.0.29) تتولى مهمة نقل سيرفلتس كثيرا أفضل.

أنا واجهت نفس المشكلة لكن للأسف لا أحد من الحلول المقترحة عملت حقا بالنسبة لي.المشكلة لم يحدث أثناء النشر و كنت لا تفعل أي الساخن النشر.

في حالة حدوث المشكلة في كل مرة في نفس النقطة أثناء تنفيذ my web-التطبيق أثناء الاتصال (عن طريق السبات) إلى قاعدة البيانات.

هذا الرابط (كما ذكر سابقا) لم توفر ما يكفي من الدواخل لحل المشكلة.تحريك jdbc-(mysql)-سائق من شبكة الإنترنت-INF و في jre/lib/ext/ مجلد يبدو أنه قد حل المشكلة.هذا ليس الحل المثالي ، منذ الترقية إلى أحدث JRE قد تتطلب منك إعادة تثبيت برنامج التشغيل.مرشح آخر يمكن أن يسبب مشاكل مماثلة هو log4j ، لذلك قد ترغب في نقل هذا واحد أيضا

الخطوة الأولى في هذه الحالة هو أن تحقق ما إذا كان GC يسمح لتفريغ دروس من PermGen.معيار JVM بدلا من المحافظ في هذا الصدد – دروس يولدون أن يعيش إلى الأبد.لذلك مرة واحدة تحميل, دروس البقاء في الذاكرة حتى لو أي رمز يتم استخدامها بعد الآن.هذا يمكن أن تصبح مشكلة عندما يقوم التطبيق بإنشاء الكثير من الطبقات حيوي و الفئات التي تم إنشاؤها ليست هناك حاجة لفترات أطول.في مثل هذه الحالة ، مما يسمح JVM لتفريغ الدرجة التعاريف يمكن أن تكون مفيدة.ويمكن تحقيق هذا عن طريق إضافة واحدة فقط تكوين المعلمة بدء التشغيل البرامج النصية:

-XX:+CMSClassUnloadingEnabled

افتراضيا يتم تعيين إلى false وذلك لتمكين هذه تحتاج إلى صراحة تعيين الخيار التالي في جافا الخيارات.إذا تم تمكين CMSClassUnloadingEnabled ، GC سوف اكتساح PermGen جدا و إزالة الطبقات التي لم تعد تستخدم.نضع في اعتبارنا أن هذا الخيار سوف تعمل فقط عندما UseConcMarkSweepGC هو أيضا تمكين استخدام الخيار أدناه.لذلك عند تشغيل ParallelGC أو لا سمح الله, مسلسل GC, تأكد من تعيين جهاز GC CMS من خلال تحديد:

-XX:+UseConcMarkSweepGC

تعيين هر المزيد من الذاكرة ليس الحل المناسب.

الحل الصحيح هو أن تفعل تنظيف بعد السياق هو تدمير صوغه (الساخنة نشر).الحل هو وقف تسرب الذاكرة.

إذا كان الخاص بك القط/Webapp خادم أقول لك أن فشل في تسجيل السائقين (JDBC) ، ثم إلغاء تسجيل لهم.سيؤدي هذا إلى إيقاف تسرب الذاكرة.

يمكنك إنشاء ServletContextListener وتكوينه في web.xml.هنا عينة ServletContextListener:

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;

import com.mysql.jdbc.AbandonedConnectionCleanupThread;

/**
 * 
 * @author alejandro.tkachuk / calculistik.com
 *
 */
public class AppContextListener implements ServletContextListener {

    private static final Logger logger = Logger.getLogger(AppContextListener.class);

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        logger.info("AppContextListener started");
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        logger.info("AppContextListener destroyed");

        // manually unregister the JDBC drivers
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver driver = drivers.nextElement();
            try {
                DriverManager.deregisterDriver(driver);
                logger.info(String.format("Unregistering jdbc driver: %s", driver));
            } catch (SQLException e) {
                logger.info(String.format("Error unregistering driver %s", driver), e);
            }

        }

        // manually shutdown clean up threads
        try {
            AbandonedConnectionCleanupThread.shutdown();
            logger.info("Shutting down AbandonedConnectionCleanupThread");
        } catch (InterruptedException e) {
            logger.warn("SEVERE problem shutting down AbandonedConnectionCleanupThread: ", e);
            e.printStackTrace();
        }        
    }
}

و هنا يمكنك تكوين في web.xml:

<listener>
    <listener-class>
        com.calculistik.mediweb.context.AppContextListener 
    </listener-class>
</listener>  

"هم" من الخطأ لأنني تشغيل 6.0.29 و نفس المشكلة حتى بعد وضع كل الخيارات.كما تيم هاولاند ذكر أعلاه, هذه الخيارات فقط تأجيل لا مفر منه.أنها تسمح لي بنقل 3 مرات قبل أن تصل الخطأ بدلا من كل مرة كنت إعادة الانتشار.

في حال كنت تحصل على هذا في eclipse IDE ، حتى بعد تعيين المعلمات --launcher.XXMaxPermSize, -XX:MaxPermSize, الخ, لا يزال إذا كنت تحصل على نفس الخطأ ، فإنه على الأرجح هو أن هذا الكسوف هو استخدام عربات التي تجرها الدواب نسخة الجافا التي قد تم تثبيتها من قبل بعض تطبيقات الطرف الثالث و تعيين إلى الافتراضي.هذه الإصدارات عربات التي تجرها الدواب لا تلتقط PermSize المعلمات و لذلك لا يهم ما الذي كنت لا تزال تبقي على هذه أخطاء الذاكرة.حتى في الكسوف.ini إضافة المعايير التالية:

-vm <path to the right JRE directory>/<name of javaw executable>

أيضا تأكد من تعيين الافتراضي JRE في تفضيلات في الكسوف إلى الإصدار الصحيح من جافا.

الطريقة الوحيدة التي عملت بالنسبة لي كان مع JRockit JVM.لدي MyEclipse 8.6.

JVM هو كومة بتخزين كافة الكائنات التي تم إنشاؤها بواسطة تشغيل برنامج جافا.جافا يستخدم new مشغل لخلق الكائنات ، و الذاكرة كائنات جديدة يتم تخصيص كومة الذاكرة المؤقتة في وقت التشغيل.جمع القمامة هي آلية تلقائيا تحرير الذاكرة الواردة من الأشياء التي لم تعد المشار إليه من قبل البرنامج.

كنت أعاني من مشكلة مشابهة.لي جدك 7 + مخضرم 3.0.2 + الدعامات 2.0 + Google GUICE حقن التبعية القائمة على المشروع.

كلما حاولت تشغيل mvn clean package الأمر كان يظهر الخطأ التالي ، "بناء الفشل" حدث

org.أباتشي.مخضرم.مؤكدة.util.SurefireReflectionException:java.لانغ.تعكس.InvocationTargetException ؛ متداخلة استثناء جافا.لانغ.تعكس.InvocationTargetException:null java.لانغ.تعكس.InvocationTargetException سببها:java.لانغ.OutOfMemoryError:PermGen الفضائية

لقد حاولت كل ما سبق النصائح المفيدة والحيل ولكن للأسف لا يعمل بالنسبة لي.ما عملت بالنسبة لي هو موضح خطوة بخطوة أدناه :=>

  1. انتقل إلى الخاص بك pom.xml
  2. البحث عن <artifactId>maven-surefire-plugin</artifactId>
  3. إضافة جديدة <configuration> العنصر ثم <argLine> دون العنصر الذي تمر -Xmx512m -XX:MaxPermSize=256m كما هو مبين أدناه =>

<configuration> <argLine>-Xmx512m -XX:MaxPermSize=256m</argLine> </configuration>

آمل أن يساعد ، سعيد البرمجة :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top