تخطَّ إلى المحتوى

DHAT - Dynamic Heap Analysis Tool

DHAT - Dynamic Heap Analysis Tool

DHAT (Dynamic Heap Analysis Tool) هي أداة Valgrind التي تجيب سؤال مختلف من معظم محللي الذاكرة. بدلاً من “كم الذاكرة التي خصصت” فقط فإنها تقرير كيفية استخدام الذاكرة بالفعل: blocks المخصصة ولم تُقرأ أبداً و blocks المكتوبة مرة واحدة ولم تُلمس مرة أخرى و allocations قصيرة الأجل جداً و allocations أكبر بكثير من البايتات المزار فعلاً. وجهة view الاستخدام هذه غالباً ما تكشف النفايات التي محللي الملف التعريفي size-only لا تستطيع أن ترى.

التثبيت

المنصةالأمر
Debian/Ubuntusudo apt install valgrind
Fedora/RHELsudo dnf install valgrind
Arch Linuxsudo pacman -S valgrind
macOSدعم محدود; فضل Linux
التحققvalgrind --tool=dhat --version

بناء برنامجك مع -g لـ useful stack traces. DHAT يعمل تحت Valgrind حتى توقع بطء كبير — هذه أداة تحليل وليست محلل ملف تعريفي للإنتاج.

تشغيل DHAT

valgrind --tool=dhat ./my-program
# → ينتج dhat.out.<pid>
الخيارالغرض
--dhat-out-file=FILEمسار الإخراج
--mode=heapتحديد ملف تعريفي الـ heap الافتراضي
--mode=copyتحديد ملف تعريفي لـ memory copying (memcpy إلخ.)
--mode=ad-hocنقاط البرمجة المخصصة
--num-callers=Nعمق المكدس في التقارير

عرض النتائج

DHAT output هو JSON و تُعرض في عارض HTML المضمنة:

# فتح العارض وتحميل dhat.out.<pid>
firefox /usr/libexec/valgrind/dh_view.html
عنصر واجهة رسوميةيعرض
شجرة نقاط الـ allocationمجمع حسب call stack
إجمالي / max bytesمقدار لكل site
Reads / writesكم الذاكرة الفعلي تم الوصول إليها
Lifetimesكم طويل عاش blocks
الفرزحسب أي metric لإيجاد المخترقين الأسوأ

المقاييس التي تهم

المقياسيكشف
إجمالي bytesمقدار allocation الكامل من هذا site
Max bytesالاستخدام المتزامن الأقصى
Reads / writesكثافة الوصول
Reads = 0مخصص لكن لم تُقرأ أبداً — نفايات صرفة
Writes = 0لم تُهيأ أبداً — ربما bug أو نفايات
Short lifetimesChurn; مرشحات stack/pooling
Access ratioالبايتات المزار مقابل bytes المخصصة

حالة “reads = 0” هي الاكتشاف الكلاسيكي DHAT: الذاكرة التي برنامج بجد يخصص و يملأ و يحرر بدون أي شيء يقرؤها.

الاكتشافات الشائعة و الإصلاحات

الاكتشافالإصلاح المحتمل
allocations صغيرة قصيرة الأجل كثيرةStack allocation أو arena أو object pool
Block كبير و portion مزار صغيرةخصص فقط ما تستخدم; lazy load
allocations لم تُقرأ أبداًحذف العمل تماماً
repeated alloc/free من نفس الحجمإعادة استخدام buffer
containers oversizedReserve accurate capacity

Copy Mode

valgrind --tool=dhat --mode=copy ./my-program

Copy mode يحدد ملف تعريفي لـ memcpy/memmove مقدار بـ call site — مفيد عندما التحديد ملف تعريفي يظهر وقت في copying وتحتاج معرفة أي كود مسؤول.

Ad-Hoc Mode

Ad-hoc mode تسمح لك بعد أحداث تعسفية بـ annotate الكود الخاص بك مع طلبات عميل DHAT وتحويل DHAT إلى عام “أي call stack يفعل هذا الأكثر” counter.

DHAT مقابل الأدوات ذات الصلة

الجانبDHATmassifheaptrackBytehound
التركيزكيفية استخدام الذاكرةالاستخدام الأقصى بمرور الوقتتحديد ملف تعريفي Allocationاستكشاف تفاعلي
النفقات العامةعالية (Valgrind)عالية (Valgrind)منخفضةمنخفضة
رؤى فريدةUnread/underused blocksقطعات ذروةChurn + leaksتصفية غنية
الأفضل للـإيجاد عمل مهدرانخفاض الذروةتشغيلات واقعية سريعةتحليل تفاعلي عميق

استخدم heaptrack أو Bytehound لتحديد ملف تعريفي منخفض overhead للتشغيلات الواقعية; ابدأ إلى DHAT عندما تريد معرفة ما إذا كانت allocated memory استُخدمت فعلاً.

الموارد