الانتقال إلى المحتوى الرئيسي
يستخدم ClickHouse ‏jemalloc بوصفه مُخصِّص العام للذاكرة. ويأتي jemalloc مزوّدًا ببعض الأدوات لأخذ عينات من التخصيص وتنميطه. ولتسهيل تنميط تخصيص الذاكرة، تتوفر أوامر SYSTEM إلى جانب أوامر الكلمات المكوّنة من أربعة أحرف (4LW) في Keeper.

أخذ عينات من تخصيصات الذاكرة وتفريغ ملفات تعريف heap

إذا كنت تريد أخذ عينات من تخصيصات الذاكرة وإجراء تنميط لها في jemalloc، فعليك تشغيل ClickHouse/Keeper مع تمكين التنميط باستخدام متغير البيئة MALLOC_CONF:
سيأخذ jemalloc عينات من عمليات تخصيص الذاكرة ويخزّن المعلومات داخليًا. يمكنك مطالبة jemalloc بتفريغ ملف التعريف الحالي عبر تشغيل:
افتراضيًا، سيُنشأ ملف تعريف heap في /tmp/jemalloc_clickhouse._pid_._seqnum_.heap، حيث إن _pid_ هو PID الخاص بـ ClickHouse و_seqnum_ هو رقم التسلسل العام لملف تعريف heap الحالي. وبالنسبة إلى Keeper، فالملف الافتراضي هو /tmp/jemalloc_keeper._pid_._seqnum_.heap، ويخضع للقواعد نفسها. يمكن تحديد موقع مختلف بإضافة الخيار prof_prefix إلى متغير البيئة MALLOC_CONF. على سبيل المثال، إذا كنت تريد إنشاء ملفات التعريف في المجلد /data بحيث تكون بادئة اسم الملف my_current_profile، فيمكنك تشغيل ClickHouse/Keeper باستخدام متغير البيئة التالي:
سيُلحَق اسم الملف المُنشأ ببادئة PID ورقمٍ تسلسلي.

تحليل ملفات تعريف heap

بعد إنشاء ملفات تعريف heap، يلزم تحليلها. ولهذا الغرض، يمكن استخدام أداة jemalloc المسماة jeprof. ويمكن تثبيتها بعدة طرق:
  • باستخدام مدير الحزم في النظام
  • استنساخ مستودع jemalloc وتشغيل autogen.sh من المجلد الجذر. سيؤدي ذلك إلى توفير البرنامج النصي jeprof داخل المجلد bin
يستخدم jeprof الأداة addr2line لإنشاء stacktraces، وقد يكون ذلك بطيئًا جدًا. إذا كان الأمر كذلك، فيُنصح بتثبيت تنفيذ بديل لهذه الأداة.
هناك العديد من التنسيقات المختلفة التي يمكن إنشاؤها من ملف تعريف heap باستخدام jeprof. ويُنصح بتشغيل jeprof --help للحصول على معلومات حول طريقة الاستخدام والخيارات المختلفة التي توفرها الأداة. وبوجه عام، يُستخدم الأمر jeprof كما يلي:
إذا أردت مقارنة تخصيصات الذاكرة التي حدثت بين ملفّي تعريف heap، فيمكنك تعيين المعامل base:

أمثلة

  • إذا كنت تريد إنشاء ملف نصي يُكتب فيه كل إجراء في سطر مستقل:
  • إذا كنت تريد إنشاء ملف PDF يحتوي على مخطّط للاستدعاءات:

إنشاء Flame Graph

يتيح لك jeprof إنشاء collapsed stacks اللازمة لبناء flame graph. تحتاج إلى استخدام الوسيط --collapsed:
بعد ذلك، يمكنك استخدام العديد من الأدوات المختلفة لعرض collapsed stacks بصريًا. الأكثر شيوعًا هو FlameGraph الذي يتضمن برنامجًا نصيًا باسم flamegraph.pl:
أداة أخرى جديرة بالاهتمام هي speedscope، وتتيح لك تحليل المكدسات التي جُمِعت بطريقة أكثر تفاعلية.

التحكّم في مُحلِّل التخصيص أثناء التشغيل

إذا تم تشغيل ClickHouse/Keeper مع تفعيل المُحلِّل، فستتوفر أوامر إضافية لتعطيل/تفعيل تنميط تخصيص الذاكرة أثناء التشغيل. وباستخدام هذه الأوامر، يصبح من الأسهل إجراء تنميط تخصيص الذاكرة على فترات محددة فقط. لتعطيل المُحلِّل:
لتفعيل المُحلِّل:
يمكنك أيضًا التحكّم في الحالة الابتدائية للمُحلِّل من خلال ضبط الخيار prof_active، وهو مفعّل افتراضيًا. على سبيل المثال، إذا كنت لا تريد أخذ عينات من التخصيصات أثناء بدء التشغيل، بل بعده فقط، فيمكنك تفعيل المُحلِّل. يمكنك تشغيل ClickHouse/Keeper باستخدام متغير البيئة التالي:
يمكن تفعيل الـ Profiler لاحقًا.

خيارات إضافية للمُحلِّل

يتيح jemalloc العديد من الخيارات المرتبطة بالمُحلِّل، ويمكن التحكم فيها عبر تعديل متغير البيئة MALLOC_CONF. على سبيل المثال، يمكن التحكم في الفاصل الزمني بين عينات التخصيص باستخدام lg_prof_sample. إذا كنت تريد إخراج ملف تعريف heap كل N بايت، فيمكنك تفعيل ذلك باستخدام lg_prof_interval. يُنصح بالرجوع إلى الصفحة المرجعية الخاصة بـ jemalloc للحصول على قائمة كاملة بالخيارات.

موارد أخرى

يكشف ClickHouse/Keeper عن مقاييس مرتبطة بـ jemalloc بطرق مختلفة عديدة.
تحذيرمن المهم الانتباه إلى أن أياً من هذه المقاييس لا يكون متزامناً مع غيره، وقد تختلف القيم فيما بينها.

جدول النظام asynchronous_metrics

مرجع

جدول النظام jemalloc_bins

يحتوي على معلومات حول تخصيصات الذاكرة التي أُجريت عبر مُخصِّص jemalloc ضمن فئات أحجام مختلفة (bins)، والمُجمَّعة من جميع الساحات. مرجع

Prometheus

تُعرَض أيضًا جميع المقاييس المتعلقة بـ jemalloc من asynchronous_metrics عبر نقطة نهاية Prometheus في كلٍّ من ClickHouse وKeeper. مرجع

الأمر 4LW jmst في Keeper

يدعم Keeper الأمر 4LW ‏jmst، الذي يعرض إحصاءات المخصِّص الأساسية:
آخر تعديل في ٢ يوليو ٢٠٢٦