تحلل هذه المقالة الأسباب التي تجعل تدفق ذاكرة برنامج Java أكثر تفصيلًا. شاركه للجميع للرجوع إليه. التفاصيل هي كما يلي:
واجه نظامًا عبر الإنترنت تم الإبلاغ عنه java.lang.outofmemoryerror: خطأ في مساحة بيرجن ، تحتاج إلى تحديد المشكلة. لقد حصلت على هذا منذ وقت طويل ، وأنا لا أتذكره الآن ، لكن هذا سؤال مثير للاهتمام للغاية. بادئ ذي بدء ، يتمثل رد الفعل الأول في إضافة معلمات -+printgcdetails للنظر في سجلات GC المحددة ، ولكن نظرًا لأن البرنامج قد بدأه Tomcat ، فأنا أشعر بالقلق من أن هناك أشياء كثيرة مغلفة في الداخل.
ثم دعونا نلقي نظرة على سبب هذا الخطأ.
الاسم الكامل لمساحة بيرمجن هو جيل دائم ، والذي يشير إلى منطقة الحفظ الدائمة لن تنظف مساحة الكومة المختلفة. أماكن مسبقة على jsp. إذا كنت تستخدم عددًا كبيرًا من الجرة الثالثة -الحجم تحت تطبيق الويب الخاص بك ، فإن الحجم يتجاوز الحجم الافتراضي (4M) من JVM ، فسيتم إنشاء رسالة الخطأ هذه.
ثم دعونا نزيد من حجم الذاكرة الأولي للبلاغن:
أضف في بداية Linux في بداية ملف Catalina.sh: كود نسخ على النحو التالي: java_opts = "-xms1024m -xmx1024m -xx: permsize = 256m -xx: maxpermsize = 256m" "" "" "" "" "" ""
بالإضافة إلى ذلك في بداية ملف catalina.bat ضمن Windows: كود نسخ على النحو التالي: تعيين java_opts = -xms1024m -xmx1024m -xx: permsize = 256m -xx: maxpermssize = 256m
ثم ما زلنا نستخدم الذاكرة المرئية لعرض الأدوات لتحديد مشاكل محددة. الأداة المفضلة لـ JDK6 هي بالطبع أدواتها الخاصة. هذه المرة واجهت مشكلة غريبة أخرى ، أي أن عملية Tomcat لا يمكن العثور عليها بعد فتح أداة التحليل (تم العثور على JRE بعد ذلك ، ويجب أن يكون كافياً لتغييرها إلى JDK).
نظرًا لأن المنطقة المحلية غير مسموح بها ، يمكنني الاتصال عن بُعد ، فقط افتح JMX.
مثل ما سبق ، أضف رمز نسخ إلى بداية ملف java_opts من ملف catalina.sh.sh.sh. = 900 0-- dcom.sun.management.jmxremote.ssl = false -dcom.sun.management.jmxRemote.Authenticate = false
بعد بدء البرنامج ، تحقق مما إذا كان المنفذ مفتوحًا بشكل صحيح للتأكد من توصيل جهاز التحكم عن بُعد.
أنا كسول هنا وأوقف المصادقة. هذه الإعدادات فعالة على جهاز الكمبيوتر المحلي الخاص بي ، لكنها لا تكفي على الخادم. افتح jviSualVM ، انقر فوق ملف-> إضافة اتصال JMX ، ثم إضافة مضيف محلي: 1000 و Connect.
بعد البرنامج السابق ، مراقبة تغيير الذاكرة لفترة من الوقت ، ركزت على وضع PEM. قد يكون حجم ذاكرة PERM مفعولًا من قبل ، لأن التهيئة الافتراضية لـ PERS هي 16 مترًا والحد الأقصى هو 64 مترًا ، وقد تسبب هذه المشكلة بالفعل من هذه المشكلة. . إذا كنت بحاجة إلى تحديد موقع المشكلة بشكل أكبر ، فيمكنك أيضًا استخدام Btrace لعرض مكان يتم فيه استدعاء طريقة معينة. هذا يمكن أن يضع ما إذا كان يتم تنفيذ طرق معينة كما هو متوقع.
من المأمول أن يكون هذا المقال مفيدًا لتصميم برنامج Java للجميع.