سؤال

لدي تطبيق مؤسسي مع EJB.الحجم الإجمالي للتطبيق هو 34 ميجا.عندما أنشر تطبيقي، يكون كل شيء على ما يرام، ولكن عندما أعيد نشره، يزداد إجمالي عدد الفئات المحملة.أنا أستخدم visualVM لرؤية هذه المعلومات.فهل هذا ما ينبغي أن يكون أم أنه تسرب للذاكرة.كيفية حل هذه المشكلة؟شكرًا

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

المحلول

لديك تسرب classloader!

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

وعندما يكون التطبيق غير موزعين في الميدان، ومن المفترض أن classloader أن تجمع البيانات المهملة، لكن في بعض الأحيان لا يحدث لأن شيئا ما يسبب إشارة إلى قائمة. عند <م> إعادة الانتشار طلبك، خادم التطبيق يمر عبر نفس الحركات كما كان من قبل، ولكن الآن، هناك أقل من الذاكرة المتوفرة.

لمزيد من المعلومات حول هذا الموضوع، نلقي نظرة على فرانك Kieviet الصورة بلوق وظيفة تسمى <أ href ل = "http://frankkieviet.blogspot.com/2006/10/classloader-leaks-dreaded-permgen-space.html" يختلط = "نوفولو noreferrer"> التسريبات Classloader ومتابعة <أ href ل = "http://frankkieviet.blogspot.com/2006/10/how-to-fix-dreaded-permgen-space.html" يختلط = "نوفولو noreferrer"> كيفية إصلاح التسريبات Classloader .

نصائح أخرى

يعد Visual VM مجرد إصدار مستقل لأداة "ملف التعريف" المضمنة في Netbeans.

لذلك من أجل اكتشاف تسرب الذاكرة الخاص بك ، يجب عليك قراءة الوثائق لنيوكبانز بيرفيلر.

فيما يلي بعض الروابط لتبدأ

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