زمن الجيل
عند تشغيل برنامج Java، يتم أحيانًا إنشاء ملفات JavaCore وHeapDump. ويحدث هذا عادةً عندما يواجه برنامج Java مشكلة قاتلة.
في بعض الأحيان، بعد حدوث مشكلة قاتلة، لن يتوقف تطبيق Java ويمكنه الاستمرار في التشغيل؛
لكن في بعض الأحيان تحدث مشكلات قاتلة وتموت عملية Java؛
من أجل الحفاظ على حالة تشغيل تطبيق Java قبل حدوث خطأ فادح، يقوم JVM بإنشاء ملفين قبل الموت، وهما ملفات JavaCore وHeapDump.
ما هو الفرق
تتعلق JavaCore بوحدة المعالجة المركزية (CPU)، بينما تتعلق ملفات HeapDump بالذاكرة.
يحفظ ملف JavaCore بشكل أساسي موضع التشغيل لكل مؤشر ترابط لتطبيق Java في لحظة معينة، أي الفئة والطريقة والخط الذي ينفذه JVM. إنه ملف نصي، بعد فتحه، يمكنك رؤية مكدس التنفيذ لكل مؤشر ترابط وعرضه كتتبع مكدس. من خلال تحليل ملف JavaCore، يمكننا معرفة ما إذا كان التطبيق "عالقًا" عند نقطة معينة، أي أن تشغيله عند نقطة معينة يستغرق وقتًا طويلاً، مثل استعلام قاعدة البيانات الذي لا يتلقى استجابة لفترة طويلة الوقت، مما يؤدي في النهاية إلى تعطل النظام.
ملف HeapDump هو ملف ثنائي يقوم بحفظ استخدام العناصر الموجودة في كومة JVM في وقت معين. يتطلب هذا النوع من الملفات أدوات مقابلة لتحليلها، مثل أدوات مثل IBM Heap Analyzer. الوظيفة الأكثر أهمية لهذا النوع من الملفات هي تحليل ما إذا كان هناك تجاوز في الذاكرة في النظام.
كيفية توليد
يمكن إنشاء هذين الملفين يدويًا. عندما نواجه موقفًا يصبح فيه النظام بطيئًا أو غير مستجيب، يمكننا إنشاء ملفات JavaCore وHeapDump يدويًا.
في أنظمة Unix/Linux، طريقة إنشاء هذين الملفين هي كما يلي:
# ملاحظة -ef |
المستخدم 4616 4582 0 17:30 نقطة/0 00:00:00 grep java
root 5580 1 0 Oct27 00:02:27 /usr/bin/java -server -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava. util.logging.config.file=/usr/local/tomcat8090/conf/logging.properties -Djava.endorsed.dirs=/usr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat8090 -Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start
# قتل -3 5580
كيفية التحليل
ملف جافا كور
تعتبر مجموعتا الملفات فعالتين بشكل خاص عند تحليل JavaCore، لأنه يمكنهما رؤية موضع تنفيذ الخيط في نقطتين زمنيتين، إذا وجد أن نفس الخيط قد تم تنفيذه في نفس الموضع في مجموعتي البيانات يعني أنه قد تكون هناك مشكلة هنا، لأن البرنامج يعمل بسرعة كبيرة، وإذا وصل إلى نقطة معينة مرتين، فهذا يعني أن هذه النقطة تستغرق وقتًا طويلاً، ومن خلال تحليل هذين الملفين، يمكننا معرفة السبب وحلها المشكلة.
توجد علامة "تفاصيل مؤشر الترابط الحالي" في رأس ملف JavaCore، والتي تسجل معرف مؤشر الترابط للنظام الذي يعمل عند إنشاء JavaCore. استخدم معرف مؤشر الترابط للعثور على المعلومات التفصيلية لمؤشر الترابط في الملف الفئة التي يعمل بها مؤشر الترابط وتتسبب في JavaCore.
باطل ------------------------------------------------- - -----------------------
0SECTION TITLE روتين تفريغ المكون الفرعي
فارغة ===================================================================
تم استلام 1TISIGINFOOUTOFMEMORY
1TIDATETIME التاريخ: 2011/12/07 الساعة 15:59:42
1TIFILENAME اسم ملف Javacore:/usr/WebSphere/AppServer/profiles/WCSProdNode2/javacore19202086.1323298782.txt
باطل ------------------------------------------------- - -----------------------
0SECTION XHPI روتين تفريغ المكون الفرعي
فارغة ================================================================
1XHTIME الأربعاء 7 ديسمبر 15:59:42 2011
1XHSIGRECV إشارة غير متوقعة -1 تم استلامها عند 0x0 في <غير معروف> تم إنهاء المعالجة.
1XHFULLVERSION J2RE 1.4.2 IBM AIX بناء ca142ifx-20090918 (SR13 FP2)
باطل
1XHCURRENTTHD تفاصيل الموضوع الحالي
باطل ---------------------------
2XHCURRSYSTHD "حاوية الويب: 5" sys_thread_t:0x45FB5328
3XHNATIVESTACK المكدس الأصلي
باطل------------
3XHSTACKLINEERR غير متوفر - عنوان المكدس غير صالح
:::
:::
0SECTION روتين تفريغ المكون الفرعي XM
فارغة ====================
باطل
1XMCURTHDINFO تفاصيل الموضوع الحالي
باطل ---------------------------
3XMTHREADINFO "WebContainer: 5" (TID:0x70A8E260، sys_thread_t:0x45FB5328، الحالة:R، المعرف الأصلي:0x5CC0) prio=5
4XESTACKTRACE على org.apache.taglibs.standard.tag.common.core.ImportSupport$ImportResponseWrapper.getString(مصدر غير معروف)
4XESTACKTRACE في org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString (مصدر غير معروف)
4XESTACKTRACE على org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(مصدر غير معروف)
4XESTACKTRACE في com.ibm._jsp._part._jspx_meth_c_import_3(_part.java(الكود المترجم))
4XESTACKTRACE في com.ibm._jsp._part._jspx_meth_c_otherwise_3(_part.java(الكود المترجم))
4XESTACKTRACE في com.ibm._jsp._part._jspx_meth_c_choose_4(_part.java(الكود المترجم))
4XESTACKTRACE في com.ibm._jsp._part._jspService(_part.java:3237)
ملف هيبدومب
يعد ملف HeapDump لقطة لمكدس Java في وقت محدد وهو نوع من ملفات الصور. تقوم أداة Heap Analyzer بتحليل ملف HeapDump لمعرفة الكائنات التي تشغل مساحة كبيرة جدًا على المكدس للعثور على الكائنات التي تسبب تسربًا للذاكرة أو قد تسبب تسربًا للذاكرة.