سؤال

واسمحوا لي أن أعرف ما هي أفضل طريقة لتحديد تكوين ذاكرة الجيل الشاب الذي تم ترقيته إلى الجيل القديم ، بعد كل حدث شاب GC؟

من الناحية المثالية ، أود أن أعرف أسماء الفصول الدراسية التي تقول ، عن 80 ٪ من الكومة في كل قطعة ترقية "Gen -> Gen Old" ؛

مثال: لدي 600 متر شاب ، كل فترة تشجع 6M ؛ أريد أن أعرف الأشياء التي تؤلف هذا 6M.

شكرًا لك.

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

المحلول

ومع ذلك ، لا توجد طريقة سهلة للقيام بذلك ، ومع ذلك ، فقد قمت مؤخرًا بتحليل أداء الذاكرة لتطبيقات Java الكبيرة ، ويمكنني مشاركة بعض الخبرة.

إليكم كيف وجدت الأشياء التي يتم تعزيزها إلى Gen القديم:

أولاً ، تحتاج إلى تحديد الأشياء في مساحة "القديمة/المقيدة". هذا هو في الأساس تحليل كومة جافا القياسي. لهذا أوصي jmap. إنه جزء من Sun JVM. يركض:jmap -dump:file=heap.hprof PID للحصول على تفريغ كومة. سيؤدي ذلك إلى إيقاف JVM أثناء التفريغ (~ لمدة 30 ثانية على كومة 2 جيجابايت)

الآن قم بتحميل ملف .prof في محلل الذاكرة (أفضل أداة لذلك ، أيد) سأقضي يومًا في اللعب مع محلل الذاكرة لفهمه ، ومشاهدة Screencam (يحتاج إلى تسجيل دخول ، ولكن يستحق ذلك).

الآن ستعرف الأشياء الموجودة في كومةك.

فيما يلي الخدعة: في شاشة نظرة عامة لمحلل الذاكرة ، هناك رابط لـ: "الرسم البياني للكائنات التي لا يمكن الوصول إليها". الآن يتم جمع هذه الكائنات جميعها خلال GC التالي. ولكن ربما يكون البعض في عدن ، والبعض الآخر في Survivor وبعضهم في القديم.

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

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

  • ما هي الأشياء التي يتم إنشاؤها ويمكن الوصول إليها. (محلل الذاكرة)
  • الكائنات التي لا يمكن الوصول إليها في كومة (محلل الذاكرة)
  • الكائنات التي تم إنشاؤها أثناء التشغيل (Profiler)

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

حسنا حظا سعيدا. /jt

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