عرض محلل ملفات تعريف Application Insights لبيانات .NET

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

  • قم بإنشاء نسبة استخدام الشبكة إلى تطبيق الويب الخاص بك عن طريق بدء اختبار أداء الويب أو بدء جلسة محلل ملفات التعريف عند الطلب.
  • عرض تتبعات محلل ملفات التعريف بعد اختبار التحميل أو جلسة عمل محلل ملفات التعريف.
  • تعرف على كيفية قراءة بيانات أداء محلل ملفات التعريف ومكدس الاستدعاءات.

إنشاء نسبة استخدام الشبكة لخدمتك

لكي يقوم محلل ملفات تعريف .NET بتحميل التتبعات، يجب أن تتعامل خدمتك مع الطلبات بنشاط.

إذا قمت بتمكين محلل ملفات التعريف ل .NET حديثا، فقم بتشغيل اختبار تحميل قصير باستخدام اختبار تحميل Azure.

في حال كان تطبيق الويب الخاص بك يحتوي بالفعل على حركة مرور واردة أو إذا كنت ترغب فقط في إنشاء نسبة استخدام الشبكة يدوياً، فتخط اختبار التحميل وابدأ جلسة محلل ملفات التعريف عند الطلب:

  1. من صفحة نظرة عامة حول Application Insights، حدد Performance من القائمةِ اليسرى.

  2. في جزء Performance، حدد Profiler من القائمة العلوية لإعدادات محلل ملفات التعريف.

    لقطة شاشة لزر محلل ملفات التعريف من جزء الأداء.

  3. بمجرد تحميل صفحة إعداداتِ ملف التعريف، حدد Profile Now.

    لقطة شاشة ميزات وإعدادات صفحة محلل ملفات التعريف

عرض التتبعات

  1. بعد انتهاء تشغيل جلسات محلل ملفات التعريف، ارجع إلى جزء Performance.

  2. ضمن Drill into...، حدد Profiler traces لعرض التتبعات.

    لقطة شاشة لصفحةِ مستكشف التتبع

يعرض مستكشف التتبع المعلومات التالية:

تصفية ‏‏الوصف
شجرة ملف التعريف v. الرسم البياني للهب اعرض التتبعات كشجرة أو في شكل رسم بياني.
مسار سريع حدد لفتح أكبر عُقدة طرفية. في معظم الحالات، تكون هذه العقدة بالقرب من ازدحام الأداء.
تبعيات الإطار حدد لعرض كل من تبعيات إطار العمل المتتبعة المرتبطة بالتتبعات.
إخفاء الأحداثِ اكتب سلاسل لإخفائها من عرضِ التتبع. حدد Suggested events للحصولِ على اقتراحات.
الحدث اسم الحدثِ أو الوظيفة. تعرض الشجرة مزيجا من التعليمات البرمجية والأحداث التي حدثت، مثل أحداث SQL و HTTP. يمثل الحدث العلوي مدة الطلب الإجمالية.
الوحدة النمطية الوحدة النمطية التي وقع فيها الحدث أو الوظيفة التي تم تتبعها.
وقت مؤشر الترابط الفاصل الزمني بين بدء العمليةِ ونهاية العملية.
المخطط الزمني الوقت الذي كانت فيه الوظيفة أو الحدث يعملان بالنسبةِ للوظائف الأخرى.

كيفية قراءة بيانات الأداء

يستخدم محلل ملفات تعريف .NET مزيجا من أساليب أخذ العينات والأجهزة لتحليل أداء التطبيق الخاص بك. أثناء تنفيذ مجموعة مفصلة، يقوم محلل ملفات التعريف .NET:

  • عين مؤشر التعليمات لكل وحدة معالجة مركزية لكل جهاز كل مللي ثانية.
    • يلتقط كل نموذج مكدس الاستدعاءات الكامل لملخص الرسائل، مما يعطي معلومات مفصلة على كل من المستويات العالية والمنخفضة من التجريد.
  • يجمع الأحداث لتتبع ارتباط النشاط والسببية، بما في ذلك:
    • أحداث تبديل السياق
    • أحداث مكتبة المهام المتوازية (TPL)
    • أحداث تجمع مؤشر الترابط

مكدس الاستدعاءات المعروض في عرض الخط الزمني هو نتيجة لأخذ العينات والأجهزة. نظراً لأن كل نموذج يلتقط مكدس الاستدعاءات الكامل لمؤشر الترابط، فإنه يتضمن تعليمة برمجية من Microsoft .NET Framework وأطر أخرى تشير إليها.

تخصيص العنصرِ (clr! JIT_New أو clr! JIT_Newarr1)

clr! JIT_New وclr! JIT_Newarr1 هما دالتان مساعدتان في .NET Framework تخصص الذاكرةِ من كومة مُدارة.

  • يُستدعى clr! JIT_New عند تخصيص عنصر.
  • يُستدعى clr! JIT_Newarr1 عند تخصيص صفيف عنصر.

عادة ما تعمل هاتان الوظيفتانِ بسرعة. إذا استغرقت clr! JIT_New أو clr! JIT_Newarr1 وقتاً في خطك الزمني، فقد تقوم التعليمة البرمجية بتخصيص العديد من العناصر وتستهلك قدراً كبيراً من الذاكرة.

تحميل التعليمة البرمجية (clr!ThePreStub

clr! ThePreStub هي وظيفة مساعدة في .NET Framework تقوم بإعداد التعليمة البرمجيةِ للتنفيذ الأولي، والذي يتضمن عادةً التحويل البرمجي في الوقت المناسب (JIT). لكل طريقة C#، يجب استدعاء clr! ThePreStub، على الأكثر، مرة واحدة أثناء العمليةِ.

في حال استغرق clr! ThePreStub وقتاً إضافياً لطلب ما، فهذا هو أول طلب لتنفيذ هذه الطريقة. يستغرق وقت تشغيل .NET Framework وقتاً طويلاً لتحميل الطريقةِ الأولى. اعتبر:

  • استخدام عملية إحماء تنفذ هذا الجزء من التعليمة البرمجية قبل وصول المستخدمين إليها.
  • تشغيل Native Image Generator (ngen.exe) على التجميعاتِ الخاصة بك.

منافسة على الاتصالِ القفل (clr! JITutil_MonContention أو clr! JITutil_MonEnterWorker)

تشيرclr! JITutil_MonContention أو clr! JITutil_MonEnterWorker إلى أن السلسلة الحالية تنتظر تحرير قفل. غالباً ما يُعرض هذا النص عندما:

  • تنفذ عبارة C#‎ LOCK،
  • تستدعي طريقة Monitor.Enter، أو
  • تستدعي أسلوب مع السمة MethodImplOptions.Synchronized.

يحدث عادة تأمين المنافسة على الإتصال عند مؤشر ترابط A يكتسب تأمين و مؤشر ترابط B يحاول الحصول على تأمين نفس قبل مؤشر ترابط A طرح المنتج عليه.

تحميل التعليمة البرمجية ([COLD])

في حال كان وقت تشغيل .NET Framework ينفذ تعليمة برمجية غير مُحسَّنة لأول مرة، فسيحتوي اسم الطريقة على [COLD]:

mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined

لكل طريقة، يجب عرضها مرة واحدة أثناء العمليةِ، على الأكثر.

في حال كان تعليمة برمجية التحميل يستغرق وقتاً طويلاً للطلب، فهذا هو بدء تنفيذ الطلب للجزء غير المُحسَّن من الطريقة. خذ بعين الاعتبار استخدام عملية الاحماء التي تنفذ هذا الجزء من التعليمات البرمجية قبل أن يصل المستخدمين إليه.

طلب إرسال HTTP

تشير أساليب مثل HttpClient.Send إلى أن التعليمات البرمجية تنتظر طلب HTTP لإكماله.

عملية قاعدة البيانات

طرق مثل SqlCommand.Execute تشير إلى أن التعليمات البرمجية تنتظر عملية قاعدة بيانات لإنهاء.

قيد الانتظار (AWAIT_TIME)

يُشيرAWAIT_TIME إلى أن التعليمة البرمجية ينتظر انتهاء مهمة أخرى. يحدث هذا التأخير مع عبارةِ C#‎ AWAIT. عندما تفعل التعليمة البرمجية على C#‎ في انتظار:

  • فك مؤشر الترابط ويعيد التحكم إلى تجمع مؤشراتِ الترابط.
  • ليس هناك سلسلة رسائل محظورة في انتظارِ انتهاء AWAIT.

ومع ذلك، فمن المنطقي أن مؤشر الترابط الذي قام بـ AWAIT «محظور»، في انتظار انتهاء العملية. تشير عبارة AWAIT_TIME إلى الوقت المحظور، في انتظارِ انتهاء المهمة.

إذا بدا أن AWAIT_TIME في التعليمات البرمجية لإطار العمل بدلا من التعليمات البرمجية الخاصة بك، فقد يظهر محلل ملفات التعريف .NET:

  • التعليمات البرمجية لإطار العمل المستخدمة لتنفيذ AWAIT
  • التعليمات البرمجية المستخدمة لتسجيل بيانات تتبع الاستخدام حول AWAIT

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

الوقت المحظور

تشير BLOCKED_TIME إلى أن التعليمات البرمجية تنتظر مورد آخر لتكون متوفرة. على سبيل المثال، قد يكون في انتظارِ:

  • عنصرِ مزامنة
  • مؤشر ترابط ليكون متاحًا
  • طلبَ إنهاء

غير مدار وغير متزامن

من أجل تتبع الاستدعاءات غير المتزامنة عبر مؤشرات الترابط، يرسل .NET Framework أحداث ETW ويمرر معرفات النشاط بين مؤشرات الترابط. نظرا لأن التعليمات البرمجية غير المدارة (الأصلية) وبعض الأنماط القديمة من التعليمات البرمجية غير المتزامنة تفتقر إلى هذه الأحداث ومعرفات النشاط، لا يمكن لملف تعريف .NET تعقب مؤشر الترابط والوظائف التي تعمل على مؤشر الترابط. يُسمى هذا Async غير مُدار في مكدس الاستدعاءات. نزّل ملف ETW لاستخدام PerfView لمزيد من المعلومات.

زمن وحدة المعالجة المركزية

وحدة المعالجة المركزية مشغولة بتنفيذ الإرشادات.

وقت القرص

يقوم التطبيق بتنفيذ عمليات القرص.

وقت الشبكة

يقوم التطبيق بتنفيذ عمليات شبكة الاتصال.

عندما العمود

يمثل العمود When تمثيلاً مرئياً لمجموعة متنوعة من العينات الشاملة التي تم جمعها لعقدة بمرور الوقت. يتم تقسيم النطاق الإجمالي للطلب إلى 32 مجموعة زمنية، حيث تتراكم العينات الشاملة للعُقدة. يتم تمثيل كل مستودع كشريط. يمثل ارتفاع الشريط قيمة تغيير سعة. بالنسبة للعُقد التالية، يمثل الشريط استهلاك أحد الموارد أثناء المستودع:

  • تم وضع علامة على العُقد CPU_TIME أو BLOCKED_TIME.
  • العُقد التي لها علاقة واضحة باستهلاك مورد (على سبيل المثال، وحدة المعالجة المركزية أو القرص أو مؤشر الترابط).

بالنسبة لهذه القياسات، يُمكنك الحصول على قيمة أكبر من 100% باستهلاك موارد متعددة. على سبيلِ المثال، إذا كنت تستخدم وحدتي معالجة مركزية خلال فترة زمنية في المتوسط​​ فستحصل على 200%.

الخطوات التالية

تعلم كيف...