في هذه المقالة ، سأعلمك كيفية تحليل كومة مؤشر ترابط JVM وكيفية العثور على السبب الجذري للمشكلة من معلومات المكدس. في رأيي ، تقنية تحليل كومة الخيوط هي تقنية يجب على مهندسي دعم منتجات Java EE إتقانها. عادة ما تكون المعلومات المخزنة في ترابط الخيط أبعد من خيالك.
هدفي هو مشاركة المعرفة والخبرة المتراكمة في تحليل الخيوط على مدار السنوات العشر الماضية. يتم الحصول على هذه المعرفة والخبرة في التحليل العمق لمختلف الإصدارات من JVM وموردي JVM من مختلف الشركات المصنعة.
لذلك ، هل أنت مستعد الآن ، تتم إضافة هذه المقالة إلى الإشارة المرجعية. ما الذي تنتظره ، يرجى الإسراع ومشاركة خطة تدريب تحليل الموضوع هذه مع زملائك وأصدقائك.
هذا يبدو جيدًا.
اقتراحي هو متابعتي لإكمال خطة التدريب على تحليل الموضوع هذه. فيما يلي محتوى التدريب الذي سنغطيه. في الوقت نفسه ، سوف أشارككم الحالات الفعلية التي تعاملت معها حتى يتعلم الجميع وفهمها مع الجميع.
1) نظرة عامة على مداخن الخيط والمعرفة الأساسية
2) المبادئ والأدوات ذات الصلة لمكدس الخيط
3) تنسيقات كومة خيط JVM مختلفة (نقطة شمس ، IBM JRE ، Oracal Jrockit)
4) مقدمة وأسلوب التحليل لسجل مكدس الخيط
5) تحليل مداخن الخيط والتقنيات ذات الصلة
6) قوالب المشاكل الشائعة (الخيوط ، الأقفال الميتة ، IO استدعاء الموت ، إعادة تدوير القمامة/OutofMemoryerror ، الدورة الميتة ، إلخ)
7) على سبيل المثال تحليل مشاكل مكدس الخيط
آمل أن تجلب لك هذه السلسلة من التدريب مساعدة حقيقية ، لذا يرجى الاستمرار في الانتباه إلى تحديث المقالات الأسبوعية.
ولكن ماذا علي أن أفعل إذا كان لدي أي أسئلة في عملية الدراسة أو لا يمكنني فهم المحتوى في المقالة؟
لا تقلق ، فقط عاملني كمرشدك. يمكنك استشارة أي أسئلة حول مكدس الخيط (شريطة أن تكون المشكلة منخفضة للغاية). الرجاء تحديد الطرق التالية للاتصال بي:
1) علقت مباشرة في هذه المقالة (إذا كنت آسف ، يمكنك أن تكون مجهول)
2) إرسال بيانات مكدس الموضوع إلى منتدى تحليل السبب الجذري
3) أرسل لي بريدًا إلكترونيًا ، العنوان هو@[email protected]
هل يمكنك مساعدتي في تحليل المشكلات التي واجهتها على منتجاتنا؟
بالطبع ، إذا كنت على استعداد ، يمكنك أن ترسل لي بيانات Stack Live الخاصة بك من خلال منتدى تحليل البريد أو المنتدى الجذر. المشكلة الفعلية هي ملك تعلم تحسين المهارات.
آمل حقًا أن يعجب الجميع هذا التدريب. لذلك سأبذل قصارى جهدي لتزويدك بمواد عالية الجودة والإجابة على أسئلتك المختلفة.
قبل تقديم تقنية تحليل مكدس مؤشرات الترابط ونموذج المشكلة ، يجب عليك أولاً إخبارك بالمحتوى الأساسي. لذلك في هذا المنشور ، سأغطي المحتوى الأساسي ، بحيث يمكن للجميع فهم التفاعل بين حاويات JVM و Middleware و Java EE بشكل أفضل.
نظرة عامة على Java VM
الجهاز الافتراضي Java هو أساس منصة Jave EE. إنه المكان الذي يتم فيه نشر البرامج الوسيطة والتطبيقات وتشغيلها.
يوفر JVM الأشياء التالية لبرنامج الوسيطة وبرنامج Java/Java EE:
(النموذج الثنائي) برنامج Java / Java EE تشغيل البيئة بعض الخصائص والأدوات الوظيفية للبرنامج (البنية التحتية IO ، هيكل البيانات ، إدارة مؤشرات الترابط ، الأمان ، المراقبة ، إلخ).).
تخصيص وإدارة الذاكرة الديناميكية بمساعدة استرداد القمامة
يمكن أن تبقى JVM على العديد من أنظمة التشغيل (Solaris ، AIX ، Windows ، وما إلى ذلك) ، ويمكن تكوينها وفقًا لخادمك الفعلي.
التفاعل بين JVM والبرامج الوسيطة
يوضح الرسم البياني التالي النموذج التفاعلي العالي بين JVM والبرامج الوسيطة والتطبيقات.
بعض التفاعلات البسيطة والنموذجية بين JVM ، والوسيط والتطبيقات المعروضة في الشكل. كما ترون ، يتم إكمال تخصيص مؤشرات ترابط تطبيق Java EE القياسي بين جوهر الجزء الأوسط و JVM. (بالطبع ، هناك استثناءات. يمكن للتطبيق استدعاء واجهة برمجة التطبيقات مباشرة لإنشاء مؤشر ترابط. هذا النهج ليس شائعًا ، ومن الضروري أن تكون حذراً أثناء الاستخدام)
في الوقت نفسه ، يرجى ملاحظة أن بعض المواضيع تتم إدارتها بواسطة JVM.
نظرًا لأن معظم توزيع الخيط يتم من خلال حاوية Java EE ، فمن المهم فهم تتبع مكدس الخيط وفهمه ، ويمكنه تحديده من بيانات مكدس الخيط ، وهو أمر مهم بالنسبة لك. الطلبات على وشك تنفيذ حاوية Java EE.
من منظور تحليل مكدس تخزين مؤشرات الترابط ، ستتمكن من فهم الفرق بين تجمع الخيوط الذي تم اكتشافه من JVM وتحديد نوع الطلب.
سيوفر لك القسم الأخير نظرة عامة على مكدس سلسلة JVM لـ Hotsop V يوفر لك.
يرجى ملاحظة أنه يمكنك الحصول على مثال مكدس مؤشر ترابط لهذه المقالة من الأسباب الأساسية.
jvm thread stack -ما هو؟
مكدس مؤشر ترابط JVM عبارة عن لقطة زمنية معينة يمكن أن توفر لك قائمة كاملة بجميع مؤشرات ترابط Java التي تم إنشاؤها.
كل موضوع Java الذي تم العثور عليه سيعطيك المعلومات التالية:
غالبًا ما يتم استخدام اسم الخيط ؛
نوع الخيط والأولوية ، على سبيل المثال: برنامج Daemon Prio = 3 ** يقوم برنامج الوسيطة بإنشاء مؤشرات الترابط الخاصة بهم بشكل عام في شكل الوصاية الخلفية ، مما يعني أن هذه الخيوط تعمل في الخلفية ؛ لتطبيق Java EE الخاص بك **
معرف موضوع Java ، مثل: Tid = 0x000000011e52a800 ** هذا هو معرف مؤشر ترابط Java الذي تم الحصول عليه من خلال java.lang.thread.getid ().
معرف الخيط الأصلي ، مثل: NID = 0x251C ** ، فإن معرف الخيط الأصلي يتيح لك الحصول على معلومات التشغيل.
حالة موضوع Java والمعلومات التفصيلية ، مثل: في انتظار إدخال الشاشة [0xfffffffea5afb000] java.lang.thread.state: كتلة (على شاشة الكائن)
** يمكنك فهم السبب المحتمل للسبب المحتمل في حظر حالة الموضوع حاليًا ** **
تتبع Thread Java ؛ سبب العديد من أنواع المشاكل ، 90 ٪ من المعلومات المطلوبة.
تحلل الذاكرة Java Stack ؛ هذه المعلومات مفيدة للغاية عند تحليل المشكلات الناجمة عن GCs المتكررة. يمكنك استخدام بيانات أو وضع مؤشر الترابط المعروف لصنع موقع سريع.
Heappsynggen Total 466944K, Used 178734K [0xFFFFFFFFFF45C00000, 0xFFFFFFFFF70800000, 0XFFFFFFFFF70800000) Eden Space 233472K, 76% USED F45C00000, 0XFFFFFFFF50AB7C50,0XFFFFFFFFFF540000) From Space 233472K, 0% Used [0xffffffffffffff62400000, 0xFFFFFFF62400000,0XFFFFFFFFF70800000) E 233472K, 0% userd [0xffffffff54000000 , 0XFFFFFFFF54000000 , 0XFFFFFFFFF62400000) PSOLDGEN TOTAL 1400832K, USED 1400831K [0xffffffffef0400000, 0xffffff45c00000, 0xFFFFFFFFF45C00000) Object Space 1400832K, 99% Used [0xffffffFFFFFFFEF0400000, 0XFFFFFFFFF45BFFFFB8,0XFFFFFFFFFFF45C00000) PSPERMGEN TOTAL 262144K, USED 248475K , 0xffffffee0400000, 0xFFFFFFFFFF0400000) Object Space 262144K, 94 % used [0xffffffffed0400000 ، 0xffffffedf6f08،0xffffffffee0400000)
تفكيك كبير لمعلومات مكدس الخيط
من أجل السماح للجميع بالفهم بشكل أفضل ، يتم توفير الصورة التالية للجميع.
في الشكل أعلاه ، يمكن ملاحظة أن مكدس الخيط يتكون من أجزاء مختلفة متعددة. هذه المعلومات مهمة لتحليل المشكلة ، لكن تحليل وضع المشكلات المختلفة سيستخدم أجزاء مختلفة (سيحاكي وضع المشكلة ويظهر في المقالات اللاحقة.)
الآن من خلال مثال التحليل هذا ، سوف أشرح بالتفصيل مكونات Hotespot على معلومات المكدس المُحسّنة:
# تفريغ الخيط الكامل
"تفريغ الخيط الكامل" هي الكلمة الرئيسية العالمية فقط. هذه هي بداية لقطة مكدس الخيط.
Dump Comple Compot Java Hotspot (TM) 64 بت خادم VM (وضع مختلط 20.0-B11):
# Java EE Middleware ، أطراف ثالثة ، ومواضيع في برنامج تطبيق مخصص
هذا الجزء هو الجزء الأساسي من مكدس الخيط بأكمله ، وهو أيضًا الجزء الذي يحتاج عادة إلى تحليل الوقت. يعتمد عدد الخطوط المتوسطة المكدس على البرامج الوسيطة التي تستخدمها ، ومكتبة ثالثة (قد تحتوي على مؤشرات ترابط مستقلة) وتطبيقك (إذا قمت بإنشاء مؤشر ترابط مخصص ، فهذا لا يكون عادة ممارسة جيدة).
في مكدس Thread Example ، يكون WebLogic هو الوسيطة التي نستخدمها. بدءًا من WebLogic 9.2 ، ستستخدم تجمع الخيوط الفريد الذي يمكن إدارته "
"[الاستعداد] التنفيذي:" 414 "لقائمة الانتظار:" WebLogic.Kernel.Default (صقل ذاتي) "Daemon Prio = 3 Tid = 0x000000010916A800 NID = 0x2613 في Object .Wait () [0xfffffffffff000] java.lang.Thread. الحالة: الانتظار (على مراقبة الكائن) في java.lang.object.wait (الطريقة الأصلية) -على <0xffffffffff27d44de0> (wblogic.work.executetethread). work.work.cutethread.waitforrequest (executeThread.java:160) -locked <0xffffffffffff27d44de0> (A woblogic.work.executetethread)
# Through Hotspot VM Thread
هذا هو موضوع داخلي يديره نقطة الساخنة VM للتشغيل الأصلي للعمليات الداخلية. بشكل عام ، ليس عليك أن تفعل الكثير بشأن هذا ، إلا إذا وجدت معدل احتلال عالي وحدة المعالجة المركزية ما لم تكن (من خلال مداخن مؤشرات الترابط ذات الصلة و PRSTAT أو معرف الخيط الأصلي).
"مؤشر ترابط المهمة الدوري VM" prio = 3 tid = 0x0000000101238800 nid = 0x19 في انتظار الشرط
# Thould Hotspot GC Thread
عند استخدام نقطة ساخنة لـ GC المتوازي (الآن ، يكون من الشائع في بيئة النوى المادية المتعددة) ، عندما يتم إنشاء النقطة الساخنة افتراضيًا ، أو تدير كل JVM مؤشر ترابط GC مع شعار محدد. سيؤدي تنظيف GC الدوري إلى الحد الإجمالي لوقت GC ؛
"GC Task Thread#0 (parallelgc)" prio = 3 tid = 0x0000000100100120000 nid = 0x3 Runnable "GC Task Thread#1 (parallelgc)" prio = 3 tid = 0x0000131000 nid = 0x444 runnable ............................................................................................................................... ........................................................................................................................................................................................................... ...............................................................................................................................................
هذه بيانات مهمة ، لأنه عندما تواجه مشكلات تتعلق بـ GC ، مثل GC المفرط وتسرب الذاكرة ، ستتمكن من استخدام نظام التشغيل أو مؤشر ترابط Java المرتبط بقيمة المعرف الأصلي لهذه الخيوط اليمين.
# JNI Global Reference Count
المرجع العالمي لـ JNI (Java Local Interface) من الكود المحلي إلى الكائن الأساسي لكائن Java الذي يديره جامع القمامة Java. مجموعة القمامة.
في الوقت نفسه ، من المهم أيضًا الانتباه إلى إشارات JNI للكشف عن التسريبات المرتبطة بـ JNI.
المراجع العالمية JNI: 1925
# java stack استخدام عرض
تمت إضافة هذه البيانات إلى JDK 1.6 ، مما يوفر لك عرضًا قصيرًا وسريعًا لمكدس النقاط الساخنة. وكومة Java في لقطة منفصلة ، بحيث يمكنك تحليل (أو استبعادها) في مساحة محددة للذاكرة Java في ذلك الوقت.
Heap Psyounggen Total 466944K, Used 178734K [0xffffffff45c00000, 0xFFFFFFFF70800000, 0XFFFFFFFFF70800000) Eden Space 233472K, 76% USED F45C00000, 0XFFFFFFFF50AB7C50,0XFFFFFFFFFF540000) From Space 233472K, 0% Used [0xffffffffffffff62400000, 0xFFFFFFF62400000,0XFFFFFFFFF70800000) e 233472K, 0% used [ 0XFFFFFFFFF54000000, 0xFFFFFFFFF540000 ، 0xffffffffff6400000) psoldgen المجموع 1400832K ، المستخدمة 1400831K [0xffffffffffffffffffffffffffffffffffffffffffffffffi ff45c00000) object 1400832k FFFFFFFFFFFF45BFFFFFB8،0XFFFFFFFFFF45C00000) PSPERMGEN TOTAL 262144K ، يستخدم 248475K [0 XFFFFFFFFED0400000 ، 0XFFFFFFFFFE0400000 ، 0xFFFFFFFFFFFEFFEF400000) 94 ٪ المستخدمة [0xffffffffffed0400000،0xffffffffffff6a6f08،0xffffffffe040000