SYSTEM، وأوامر الكلمات ذات الأحرف الأربعة (4LW) في Keeper. وهناك عدة طرق لفحص النتائج:
- اجمع العينات في
system.trace_logتحت النوعJemallocSampleلإجراء تحليل لكل استعلام على حدة. - اعرض إحصاءات الذاكرة المباشرة واسترجع ملف تعريف الكومة عبر واجهة الويب المدمجة لـ jemalloc (26.2+).
- استعلم عن ملف تعريف الكومة الحالي مباشرةً من SQL باستخدام
system.jemalloc_profile_text(26.2+). - نفّذ flush لملفات ملف تعريف الكومة إلى disk ثم حلّلها باستخدام
jeprof.
ينطبق هذا الدليل على الإصدارات 25.9+.
أما الإصدارات الأقدم، فيُرجى مراجعة تنميط التخصيص للإصدارات الأقدم من 25.9.
أخذ عينات من تخصيصات الذاكرة
jemalloc_enable_global_profiler:
jemalloc عينات من عمليات تخصيص الذاكرة ويخزّن المعلومات داخليًا.
يمكنك أيضًا تمكين أخذ العينات لكل query باستخدام الإعداد jemalloc_enable_profiler.
تخزين عينات jemalloc في system.trace_log
system.trace_log ضمن النوع JemallocSample.
لتمكين ذلك على مستوى النظام بالكامل، استخدم إعداد jemalloc_collect_global_profile_samples_in_trace_log:
jemalloc_collect_profile_samples_in_trace_log.
مثال: تحليل استهلاك الذاكرة لاستعلام
system.trace_log:
إذا كان ClickHouse قد بدأ التشغيل مع
jemalloc_enable_global_profiler، فلن تحتاج إلى تفعيل jemalloc_enable_profiler.
وينطبق الأمر نفسه على jemalloc_collect_global_profile_samples_in_trace_log وjemalloc_collect_profile_samples_in_trace_log.system.trace_log:
واجهة مستخدم ويب لـ jemalloc
ينطبق هذا القسم على الإصدارات 26.2+.
/jemalloc.
وتعرض مقاييس الذاكرة المباشرة مع مخططات، بما في ذلك الذاكرة المخصصة والنشطة والمقيمة والمعيّنة، بالإضافة إلى إحصاءات كل ساحة وكل bin.
ويمكنك أيضًا جلب ملفات ملف تعريف الكومة العامة وملفات ملف تعريف الكومة لكل استعلام مباشرةً من الواجهة.
- ClickHouse
- Keeper
جلب ملفات تعريف heap من SQL
ينطبق هذا القسم على الإصدارات 26.2+.
system.jemalloc_profile_text جلب ملف تعريف الكومة الحالي لـ jemalloc وعرضه مباشرةً من SQL، من دون الحاجة إلى أدوات خارجية أو إلى تفريغه إلى القرص أولًا.
يحتوي الجدول على عمود واحد:
يمكنك الاستعلام عن الجدول مباشرةً — لا حاجة إلى تفريغ ملف تعريف الكومة مسبقًا:
تنسيق الإخراج
jemalloc_profile_text_output_format، الذي يدعم ثلاث قيم:
raw— ملف تعريف الكومة خام كما يُنتجه jemalloc.symbolized— تنسيق متوافق مع jeprof مع تضمين رموز الدوال. وبما أن الرموز مضمنة بالفعل، يمكن لـjeprofتحليل المخرجات دون الحاجة إلى ملف ClickHouse التنفيذي.collapsed(الافتراضي) — مكدسات مطوية متوافقة مع FlameGraph، بمكدس واحد في كل سطر مع عدد البايتات.
إعدادات إضافية
jemalloc_profile_text_symbolize_with_inline(Bool، الافتراضي:true) — ما إذا كان سيتم تضمين الإطارات المضمّنة عند فكّ الرموز. يؤدي تعطيل هذا الخيار إلى تسريع فكّ الرموز بشكل ملحوظ، لكنه يقلل الدقة لأن استدعاءات الدوال المضمّنة لن تظهر في المكدسات. لا يؤثر ذلك إلا في التنسيقينsymbolizedوcollapsed.jemalloc_profile_text_collapsed_use_count(Bool، الافتراضي:false) — عند استخدام التنسيقcollapsed، يتم التجميع حسب عدد التخصيصات بدلًا من البايتات.
مثال: إنشاء مخطط اللهب من SQL
collapsed، يمكنك تمرير الإخراج مباشرةً إلى FlameGraph:
تفريغ ملفات تعريف الكومة إلى القرص
jeprof، فيمكنك تفريغها إلى القرص.
افتراضيًا، سيتم إنشاء ملف تعريف الكومة في /tmp/jemalloc_clickhouse._pid_._seqnum_.heap، حيث يشير _pid_ إلى معرّف العملية (PID) الخاص بـ ClickHouse، ويشير _seqnum_ إلى رقم التسلسل العام لملف تعريف الكومة الحالي.
بالنسبة إلى Keeper، يكون الملف الافتراضي هو /tmp/jemalloc_keeper._pid_._seqnum_.heap، ويتبع القواعد نفسها.
لتفريغ ملف التعريف الحالي:
- ClickHouse
- Keeper
prof_prefix إلى متغير البيئة MALLOC_CONF.
على سبيل المثال، إذا كنت تريد إنشاء ملفات التعريف في المجلد /data بحيث تكون بادئة اسم الملف هي my_current_profile، فيمكنك تشغيل ClickHouse/Keeper باستخدام متغير البيئة التالي:
تحليل ملفات ملف تعريف الكومة باستخدام jeprof
jemalloc المسماة jeprof. ويمكن تثبيتها بعدة طرق:
- باستخدام مدير الحزم الخاص بالنظام
- استنساخ مستودع jemalloc وتشغيل
autogen.shمن المجلد الجذر. سيوفّر لك ذلك البرنامج النصيjeprofداخل المجلدbin
jeprof --help للحصول على القائمة الكاملة بالخيارات.
ملفات تعريف الكومة المُرمَّزة بالرموز
flush باستخدام SYSTEM JEMALLOC FLUSH PROFILE.
ويحتوي ملف التعريف المُرمَّز بالرموز (ذو الامتداد .symbolized) على رموز الدوال المضمّنة، ويمكن تحليله باستخدام jeprof دون الحاجة إلى الملف التنفيذي لـ ClickHouse.
على سبيل المثال، عند تشغيل:
/tmp/jemalloc_clickhouse.12345.0.heap.symbolized).
يمكنك بعد ذلك تحليله مباشرةً باستخدام jeprof:
لا حاجة إلى الملف التنفيذي: عند استخدام ملفات التعريف مُرمَّزة بالرموز (ملفات
.symbolized)، لن تحتاج إلى تمرير مسار الملف التنفيذي لـ ClickHouse إلى jeprof. وهذا يجعل تحليل ملفات التعريف أسهل بكثير على أجهزة مختلفة أو بعد تحديث الملف التنفيذي.بالنسبة إلى ملفات التعريف غير المُرمَّزة بالرموز، يستخدم وبدلًا من ذلك، يعمل
jeprof الأداة addr2line لإنشاء stacktraces، وقد يكون ذلك بطيئًا جدًا.
إذا كان الأمر كذلك، فيُوصى بتثبيت نسخة بديلة من هذه الأداة.llvm-addr2line بالكفاءة نفسها (لكن انتبه إلى أن llvm-objdump غير متوافق مع jeprof)ثم استخدمه لاحقًا على النحو التالي: jeprof --tools addr2line:/usr/bin/llvm-addr2line,nm:/usr/bin/llvm-nm,objdump:/usr/bin/objdump,c++filt:/usr/bin/llvm-cxxfilt--base:
أمثلة
- أنشئ ملفًا نصيًا تُكتب فيه كل دالة في سطر منفصل:
- أنشئ ملف PDF يتضمن مخطط الاستدعاءات:
- أنشئ ملفًا نصيًا بحيث يُكتب كل إجراء في سطر مستقل:
- أنشئ ملف PDF يحتوي على مخطط الاستدعاءات:
إنشاء مخطط اللهب
jeprof إنشاء مكدس مطوي لاستخدامها في إنشاء مخططات اللهب.
تحتاج إلى استخدام الوسيط --collapsed:
flamegraph.pl:
خيارات إضافية لـ Profiler
jemalloc العديد من الخيارات المرتبطة بـ Profiler، ويمكن التحكم فيها عبر تعديل متغير البيئة MALLOC_CONF.
على سبيل المثال، يمكن التحكم في الفاصل الزمني بين عينات التخصيص باستخدام lg_prof_sample.
إذا كنت تريد إخراج ملف تعريف الكومة كل N بايت، فيمكنك تفعيل ذلك باستخدام lg_prof_interval.
يُنصح بالرجوع إلى الصفحة المرجعية الخاصة بـ jemalloc للحصول على قائمة كاملة بالخيارات.
موارد أخرى
jemalloc بطرق عديدة ومختلفة.
جدول النظام asynchronous_metrics
جدول النظام jemalloc_bins
جدول النظام jemalloc_stats (26.2+)
malloc_stats_print() كسلسلة نصية واحدة. وهو مكافئ للأمر SYSTEM JEMALLOC STATS.
Prometheus
jemalloc من asynchronous_metrics عبر نقطة نهاية Prometheus في كلٍّ من ClickHouse وKeeper.
مرجع
أمر jmst 4LW في Keeper
jmst 4LW الذي يعرض إحصاءات أساسية للمخصِّص: