Bytehound - محلل الذاكرة ل Linux
Bytehound هو محلل ذاكرة ل Linux يتتبع كل allocation و deallocation في البرنامج ويعرض النتائج في واجهة ويب غير عادية جيدة. وراء إيجاد التسريبات فإنها تظهر allocation churn بمرور الوقت وتجميع allocations من call stack وتسمح لك بالتصفية بشكل تفاعلي — “أظهر لي allocations أكبر من 1MB لم تُحرر أبداً من هذه الوحدة.” إنها أداة قائمة على Rust تعمل مع أي برنامج أصلي (C و C++ و Rust) عبر LD_PRELOAD.
التثبيت
| الطريقة | كيف |
|---|
| الإصدار | تحميل bytehound + libbytehound.so من GitHub Releases |
| من المصدر | cargo build --release في الريبو |
| المتطلبات | Linux x86-64; برنامج مع الرموز (-g) |
| التحقق | ./bytehound --version |
تحديد الملف التعريفي للبرنامج
# Preload محلل الملف التعريفي وتشغيل برنامجك
LD_PRELOAD=./libbytehound.so ./my-program
# هذا ينتج memory-profiling_*.dat
| المتغير | الغرض |
|---|
LD_PRELOAD=./libbytehound.so | حقن hooks allocator |
MEMORY_PROFILER_OUTPUT | مسار ملف الإخراج |
MEMORY_PROFILER_LOG=warn | مستوى السجل |
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONS | تقليل الضوضاء من allocations قصيرة الأجل |
MEMORY_PROFILER_DISABLE_BY_DEFAULT | ابدأ مُجمداً و تفعيل برمجياً |
عرض النتائج
# ابدأ واجهة الويب على البيانات المجمعة
./bytehound server memory-profiling_*.dat
# → فتح http://localhost:8080
| المنظر | يعرض |
|---|
| الرسوم البيانية | استخدام الذاكرة بمرور الوقت (live و leaked و allocated) |
| Allocations | كل allocation مع stack و size و lifetime |
| Flame graph | مقدار الـ allocation المنسوب إلى call stacks |
| Leaked | Allocations لم تُحرر أبداً |
| التصفية | interactive query builder |
لغة التصفية
قوة Bytehound هي شرائح البيانات:
| التصفية | الأوجد |
|---|
| فقط leaked | Allocations حية عند الخروج |
| نطاق الحجم | على سبيل المثال > 1 MiB |
| Lifetime | قصير الأجل (churn) مقابل طويل الأجل |
| Backtrace يحتوي على | Allocations من دالة/وحدة محددة |
| نطاق زمني | Allocations خلال نافذة |
# مفهومي: leaked allocations أكبر من 1MB من وحدة parser
leaked AND size > 1048576 AND backtrace contains "parser::"
ما يجب البحث عنه
| العرض | التحقيق |
|---|
| RSS ينمو بلا حدود | ”Leaked” view — allocations لم تُحرر أبداً |
| CPU عالي في allocator | Temporary-allocation churn |
| ذاكرة spike في لحظة | time-range filter حول الـ spike |
| دالة واحدة تهيمن | Allocation flame graph |
| التجزئة | الكثير من allocations صغيرة طويلة الأجل |
كتابة النص البرمجي للتحليل
Bytehound يفضح API و CLI للأتمتة:
| الأمر | الغرض |
|---|
bytehound server DATA | واجهة رسومية تفاعلية |
bytehound export-heaptrack DATA | تحويل لأدوات heaptrack |
| REST API | الاستعلام عن allocations برمجياً |
| Scripting | تحليلات مخصصة على dataset |
تقليل النفقات العامة
| الإعداد | التأثير |
|---|
| Cull temporary allocations | إخراج أصغر بكثير وأقل ضوضاء |
| تعطيل بشكل افتراضي + تفعيل في الكود | حدد الملف التعريفي فقط المرحلة المثيرة للاهتمام |
| تشغيلات أقصر | ملفات البيانات تنمو بسرعة |
Bytehound مقابل محللي الذاكرة الأخرى
| الجانب | Bytehound | heaptrack | Valgrind massif | jemalloc prof |
|---|
| النفقات العامة | منخفضة | منخفضة | عالية جداً | منخفضة جداً |
| واجهة رسومية | واجهة ويب غنية | Qt GUI | نص/visualizer | نص + tooling |
| التصفية | ممتازة | جيدة | محدودة | محدودة |
| الإعداد | LD_PRELOAD | heaptrack ./prog | valgrind --tool=massif | إعداد allocator |
| الأفضل للـ | استكشاف تفاعلي | تحديد ملف تعريفي heap سريع | صحة عميقة | sampling الإنتاج |
قارن مع heaptrack لنهج منخفض overhead مماثل مع Qt UI; كلاهما يتفوق على Valgrind لأحمال العمل الواقعية.
الموارد