كيف تصور أداء التطبيق الخاص بك باستخدام SVG Flame Graph

نشرت: 2023-02-21

تعد الرسوم البيانية لهب SVG طريقة رائعة لتصور أداء تطبيقك. من خلال عرض الوقت الذي تقضيه في كل وظيفة ، يمكنك التعرف بسرعة على مناطق التعليمات البرمجية الخاصة بك التي تستغرق الكثير من الوقت. لعرض رسم بياني لهب SVG ، ستحتاج إلى استخدام أداة يمكنها إنشاء رسم بياني. هناك العديد من الأدوات مفتوحة المصدر المتاحة ، مثل flamegraph.io. بمجرد إنشاء مخطط اللهب الخاص بك ، يمكنك تضمينه في موقع الويب الخاص بك أو المدونة باستخدام علامة. يمكنك أيضًا استخدام أداة مثل جداول بيانات Google لعرض الرسم البياني للهب. ما عليك سوى إنشاء جدول بيانات جديد ، وتحديد "إدراج> صورة" ، ثم لصق عنوان URL الخاص بمخطط اللهب.

كيف تقوم بتشغيل رسم بياني اللهب؟

كيف تقوم بتشغيل رسم بياني اللهب؟
ملكية الصورة تعود إلى: badawi.io

من أجل تشغيل رسم بياني اللهب ، تحتاج إلى تثبيت بعض الأشياء على جهاز الكمبيوتر الخاص بك. أول ما تحتاجه هو متصفح Google Chrome. بعد ذلك ، تحتاج إلى تثبيت امتداد Flame Graph. بمجرد تثبيت هذين الأمرين ، ستحتاج إلى فتح متصفح Google Chrome والانتقال إلى صفحة ملحق Flame Graph . من هناك ، ستحتاج إلى النقر فوق الزر "إنشاء رسم بياني لهب جديد". سيؤدي ذلك إلى ظهور علامة تبويب جديدة حيث ستحتاج إلى إدخال عنوان URL لموقع الويب الذي تريد إنشاء رسم بياني لهب. بمجرد إدخال عنوان URL ، ستحتاج إلى النقر فوق الزر "Create Flame Graph". سيستغرق هذا بضع لحظات لإنشاء الرسم البياني للهب. بمجرد الانتهاء ، ستتمكن من رؤية النتائج.

يعرض الرسم البياني للهب تتبع طلب موزع وملخصًا لكل مكالمة خدمة حدثت أثناء تنفيذ الطلب. تُظهر الرسوم البيانية للهب للتتبعات الموزعة بيانات زمن الوصول والخطأ لمساعدة المطورين على تحديد الاختناقات في تطبيقاتهم. تقدم المقالة شرحًا لكيفية تفسير الرسم البياني للهب بالإضافة إلى مثال ، بالإضافة إلى طرق أخرى لتتبع الآثار الموزعة. يعرض المحور ص عمق مكدس الاستدعاءات (عدد المكالمات). عند النقر فوق امتداد على الرسم البياني للهب ، سترى عادةً ملخصًا للمدة والخطأ المرتبط بالمكالمة. يمكنك العثور على المقاييس والسجلات وبيانات أداء الشبكة ونقاط التعليمات البرمجية والمعلومات السياقية الأخرى بالنقر فوق علامات التبويب الموجودة أسفل الرسم البياني للهب. يتكون المخطط اللولبي من دائرة محاطة بمجموعة من الحلقات. يمكن استخدام الرسوم البيانية للهب لتصور الأساليب ومسارات الكود المستخدمة في تلبية طلب من مُحدد الكود. تمكنك أدوات Datadog لمراقبة أداء التطبيق والتوزيع من تتبع مسار جميع الطلبات عبر جميع الخدمات.

تمنح الرسوم البيانية اللهب المطورين طريقة سريعة وسهلة لمعرفة مشاكل الأداء

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

كيف تبحث في Flamegraph؟

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

مع ظهور الرسوم البيانية للهب ، أصبح من السهل الآن البحث عنها. يوجد مسار رمز كتابة تحت إطار TCP_send () الكبير على اليمين. إذا قمت بالنقر فوق أحد الإطارات المميزة ، يمكنك معرفة سبب حدوث ذلك. كان Tcp_Send موجودًا في 59.1٪ من العينات المختبرة. تشمل المصطلحات الأخرى المثيرة للاهتمام التي يجب البحث عنها re؟ cv و spin و copy و x.

لماذا يطلق عليه مخطط اللهب؟

عند إنشاء تصور ، استخدم Neelakanth و Roch ألوانًا عشوائية تمامًا. كانت وحدة المعالجة المركزية ساخنة (مشغولة) ، وهو ما يفسر سبب اختيار الألوان الدافئة فقط أولاً. نظرًا لأنها تشبه النيران ، سرعان ما أصبحت الرسوم البيانية للهب شائعة.

أخطار اللهب

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

من اخترع Flamegraphs؟

أصبحت الرسوم البيانية باللهب أداة مهمة لتحليل الأداء في العديد من اللغات ، وكذلك في Netflix وغيرها من الصناعات. أنشأ مؤلفهم ، Brendan Gregg ، رسم Flame Graph ، الذي نُشر في عدد يونيو 2016 من Communications of the ACM.


عارض الرسم البياني اللهب

عارض الرسم البياني اللهب هو نوع من البرامج التي تسمح للمستخدمين بتصور البيانات في شكل رسم بياني. غالبًا ما يستخدم هذا البرنامج لاستكشاف مشكلات أجهزة الكمبيوتر أو الأجهزة الأخرى وإصلاحها.

يمكنك استخدام speedscope لإلقاء نظرة على ملفات تعريف الأداء الكبيرة بطريقة تعتمد على الويب. تم استلهام FlameGraphs بواسطة Brendan Gregg من لوحة أداء أدوات مطوري Chrome. لا يتم تمرير البيانات من النظام إلى أي خوادم ، وتعمل بشكل كامل في المتصفح. يجب أن يعمل Chrome و Firefox مع جميع الأنظمة الأساسية (على الرغم من أنني اختبرت نظام Mac فقط). في العرض الثقيل الأيسر ، يتم تجميع الأكوام المتطابقة معًا بغض النظر عما إذا تم تسجيلها بشكل تسلسلي أم لا. يتم فرز مكدس كل من الوالدين بحيث يكون أثقل مكدس على اليسار - ومن هنا جاءت التسمية اليسرى. سيساعدك العرض التفصيلي للموقف في فهم مكانك من حيث عدد المكالمات الوظيفية التي لديك في موقف معين.

يستخدم Rudro Samanta نطاق السرعة لتصور ملفات تعريف تطبيقات iOS الملتقطة باستخدام Xcode. يتم استخدام Jest لكتابة حالات الاختبار ، ويتم استخدام Travis CI لدمج الكود بشكل مستمر ، ويتم استخدام Coveralls لتقرير تغطية الاختبار ، ويتم استخدام Parcel لتحويل كود المصدر ، ويتم استخدام أجمل لتهيئة الشفرة تلقائيًا. تتمثل إحدى طرق تحقيق ذلك في زيادة عدد التنسيقات التي يمكن لـ speedscope استيرادها ، وطريقة واحدة لجعل عمليات الدمج أكثر إحكامًا. أعمل على speedscope منذ تسعة أشهر الآن ، وأشعر أنني تركته يبتعد عني. بصفتي مهندسًا ، سأسعى جاهدين لإنشاء مجموعات أنظمة وأدوات يمكن صيانتها وفهمها ومفيدة لمساعدة الأشخاص في حل المشكلات المعقدة في جميع أنحاء العالم. أعتقد أنني سأخصص المزيد من الوقت للمشاريع الإبداعية والتعاونية هذا العام.

لهب الرسم البياني أون لاين

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

على عكس الأشجار والرسوم البيانية ، تستخدم الرسوم البيانية للهب مساحة الشاشة بفعالية من خلال تقديم كمية كبيرة من المعلومات بتنسيق صغير. من خلال النقر هنا ، ستتعلم كيفية تحويل الشجرة إلى رسم بياني للهب ، بالإضافة إلى السمات الرئيسية لرسم بياني اللهب. تُستخدم Flame Graphs في Google Cloud Profiler لعرض بيانات التوصيف. عند متابعة مكدس الاستدعاءات ، يقل عرض الإطارات لأن إجمالي وقت وحدة المعالجة المركزية في المستدعى لا يمكن أن يكون أكثر من وقت وحدة المعالجة المركزية في مستدعى آخر. شكل اللهب ناتج عن هذا السلوك. يظهر الرسم البياني للهب الآن على النحو التالي بعد إزالة المسافات الزائدة وإطارات التلوين باستخدام وقت وحدة المعالجة المركزية الذاتية. على الرغم من الاحتفاظ بمكدسات استدعاء foo1 و foo2 ، فإن الحزمة التي بدأت بـ foo2 وتنتهي بـ foo1 أصبحت الآن موجودة بجوار الإطار.

كيف يمكنك عمل رسم بياني للهب؟

لتوليد الرسوم البيانية للهب ، يجب عليك أولاً أخذ عينة من أثر المكدس. تم تقسيمه تقليديًا إلى نوعين: ملفات تعريف النظام ، مثل Linux perf ، والتي تعرض مسارات رمز النظام (على سبيل المثال ، JVM GC ، syscalls ، TCP) ، ولكن ليس ملفات تعريف Java. تتوفر ملفات التعريف JVM ، مثل hprof و lJP و Profilers التجارية.

مخطط اللهب مقابل الرسم البياني للهب

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

كأسلوب تقريبي ولكنه مفيد لتحديد مسارات الشفرة الساخنة (لأنها مشغولة على وحدة المعالجة المركزية) ، فإن التنميط بمعدل ثابت يؤدي إلى نتائج جيدة. تسمح لك الرسوم البيانية باللهب بتحديد مسارات الكود السريع بسرعة عن طريق أخذ عينات من آثار المكدس. يعد كل من مثالي Linux perf (perf_events) و DTrace مثالين على البرامج التي يمكنك تثبيتها. FlameGraph هي أداة Perl تنشئ SVG تفاعليًا وتسمح لك برؤية التفاصيل عن طريق سحب الصور وإفلاتها. قد يظهر التصور مشابهًا للآخرين من المصفحين ، لكنه يختلف عنهم في بعض النواحي. نظرًا لأنه تم استخدامه في البداية لتصور ما هو ساخن على وحدة المعالجة المركزية ، فقد تمت الإشارة إليه على أنه الرسم البياني للهب. تحقق من قسم ملف تعريف eBPF (8) للحصول على طريقة منخفضة التكلفة للتشغيل في نواة Linux الأحدث (لا يوصى بملف تعريف eBPF (8)).

الرجاء مراجعة قسم الرسوم البيانية للشعلة في صفحة perf_events للحصول على مزيد من المعلومات حول perf. من الممكن إخراج مخرجات مطوية مباشرةً من تقرير أداء Linux 4.5 عن طريق تضمين وضع مطوي ، والذي لا يمكن الوصول إليه إلا باستخدام stackcollapse-perf.pl. يتم توفير نسالة من kernel (-a) والمستخدم (-d) مفصولة بالمستخدم ومكدس kernel (-f) في هذه العينة عند 99 هرتز (-F 99) ، وهناك حد زمني قدره 60 ثانية للعينات. يمكن إنشاء الرسوم البيانية للهب باستخدام SystemTap v1.7 في Fedora 16. يمكن أيضًا استخدام المؤقت لأخذ عينات من آثار المكدس. يتم تشغيل مجس الملف الشخصي هذا بمعدل ساعة النظام (CONFIG_HZ). يمكن لـ SystemTap استخدام ميزة تجميع systemTap لتجميع in-kernel وتمرير تقرير (أقل تفصيلاً) للمستخدمين.

تم إنشاء الرسوم البيانية باستخدام KVM (مضيف Ubuntu) (32 بت) على ضيف Fedora 16 (مع وحدة معالجة مركزية افتراضية واحدة). على المعدن المجرد ، ستكون بعض مسارات الكود ونسب العينات مختلفة تمامًا. من الممكن النقر فوق العناصر في بيانات التوصيف لمعرفة النسب المئوية (ولكن ليس النقر للتكبير ، لأن هذا إصدار جديد) ، ولكن ليس للتكبير. الرسم البياني هو أداة ممتازة لمعرفة المزيد عن العناصر الداخلية في Linux. في مضيف برنامج Hypervisor الخاص بـ illumos kernel ، يمكن رؤية كل من المستخدم و kernel stack في هذا المثال. تتوفر أيضًا إصدارات SVG و PNG المستقلة. من أجل ملاحظة كيفية تخصيص وقت النواة لإنشاء عمليات قصيرة العمر ، قمت بتنفيذ عبء عمل مخطط اللهب هذا.

يستخدم الرسم البياني للهب عادةً لتحديد حمل مقاطعة النواة عن طريق عرض الشعر. تستهلك الموازنة NUMA في إصدار Ubuntu 1716 أكثر من نصف دورات وحدة المعالجة المركزية من أجل موازنة الذاكرة بين العقد ، مما يؤدي إلى أداء بطيء. تعد إعادة كتابة الرسم البياني للهب في D3 أمرًا ضروريًا للحفاظ على أوامر الدمج ثابتة دون الحاجة إلى إعادة إنشاء مخطط اللهب. في حديثي JavaOne 2016 عن تحليل أداء Java على Linux باستخدام Flame Graphs ، أغطي أحدث التقنيات لإنتاج الرسوم البيانية للهب ذات الوضع المختلط باستخدام Linux perf. يتضمن JDK8u60 ميزة تسمى / PreservePointerFrame تتيح لك إنشاء الرسوم البيانية للكمال واللهب. تمت إضافة JDK-8068945 إلى مكتبة JDK كتصحيح سريع لتنميط المكدس (مؤشر الإطار). عند استخدام سجل RBP كمؤشر إطار في الكود المترجم لـ x64 ، فإنه يعتبر مؤشر الإطار المناسب.

عند تشغيل DTrace كطريقة Jstack ، يمكنه تتبع المكدسات على مستوى المستخدم بالإضافة إلى طرق وفئات Java. بالنسبة لبرامج Java ، يتم استخدام Stackcollapse.pl و flamegraph.pl لإنشاء الرسوم البيانية لهب وحدة المعالجة المركزية . لا تدعم بعض إصدارات JVM المساعد ustack ، الذي لديه عدد من المشكلات. إنه يعمل مع أي تركيبة قيمة بالإضافة إلى تتبع المكدس ، وليس فقط تتبع المكدس بأعداد وحدة المعالجة المركزية. المشكلة الأولى هي أن Jstack () قد لا يكون قادرًا على السير في مجموعات التكديس بشكل صحيح بسبب الخطأ JDK-6260864 ، الذي تم تقديمه في عام 2005 ولم يتم إصلاحه حتى عام 2014. يتسبب هذا الخطأ في جعل غالبية مجموعات العينات في أعباء عمل الإنتاج الخاصة بي استراحة. يمكنك الحصول على نظرة ثاقبة حول تخصيص ذاكرة الجهاز ، وجهاز الإدخال / الإخراج ، وأنماط syscall ، والأحداث خارج وحدة المعالجة المركزية (CPU) ، ومكالمات الوظائف المحددة. إذا تم استخدام أيٍّ منها ، يمكن الحصول على تتبع المكدس بالقيمة ذات الصلة: الأعداد أو البايت أو زمن الانتقال. يمكن أيضًا عرض الرسوم البيانية للهب على صفحة Flame Graphs.

لهب الرسم البياني جافا

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

ظهرت الرسوم البيانية اللهب مؤخرًا كطريقة جديدة شائعة لتصور استخدام وحدة المعالجة المركزية في Java. يمكن إنشاؤها باستخدام ملف تعريف جافا خفيف الوزن من Google (code.google.com) وبرنامج الرسم البياني اللهب (github). إنه لأمر جيد أن الرسوم البيانية للهب ليست ميزة منفصلة عن ملفات تعريف Java في المستقبل. في منشور المدونة هذا ، سنلقي نظرة على طريقة تعتمد على Java فقط JVMTI والتي ، أثناء عملها ، لها بعض القيود. قام Jeremy Manson بإنشاء ملف تعريف Java خفيف الوزن يمكن استخدامه لأخذ عينات من وحدة المعالجة المركزية. يتم إنشاء هذا التقرير النموذجي عند بدء تشغيل جافا حتى الخروج منه ، مع إلحاق ملف trace.txt به. لتشغيل البرنامج ، هناك بعض التكاليف.

بالنسبة لبرنامجي ، كان الأمر بسيطًا (زيادة بنسبة 1٪ فقط في معدل الطلب وزيادة بنسبة 7٪ في استهلاك وحدة المعالجة المركزية). إذا كان يجب تخفيض معدل أخذ العينات ، يرجى مراجعة الأقسام التالية. يمكن تخصيص إخراج برنامج flamegraph.pl بمجموعة متنوعة من الخيارات (list -h) ، بما في ذلك العنوان. كما أن المحلل الصادق لريتشارد واربورتون ، والذي يعتمد على نفس تقنية التنميط ، مفيد أيضًا. من الممكن أن أقوم بتخفيض معدل العينة من 100 هرتز إلى 50 هرتز أو أقل إذا كنت أنوي جمع كميات كبيرة من البيانات على مدى فترة زمنية طويلة.