تكرار السؤال: …
الإجابة المختصرة
تأخذ لقطات ذاكرة متعاقبة عبر وحدة node:v8 أو Chrome DevTools وتقارنها للبحث عن الكائنات المتراكمة ومسارات الإشارة (Retainer Paths) التي تمنع الـ GC من تحريرها.
الشرح
تحدث تسريبات الذاكرة عندما تظل متغيرات محتجزة في الذاكرة دون حاجة حقيقية (مثل مصفوفات تخزين عامة، أو listeners غير ملغاة، أو closures تحتفظ بسياق ضخم). بواسطة دالة v8.writeHeapSnapshot()، يمكنك توليد ملف .heapsnapshot أثناء تشغيل السيرفر وتحليله في متصفح Chrome لفحص جدول الكائنات ومطالعة المسافة إلى الـ GC Root.
مثال بالكود
import v8 from "node:v8";
v8.writeHeapSnapshot("leak-profile.heapsnapshot");أخطاء شائعة
- أخذ لقطات الـ Heap في بيئة الإنتاج أثناء ذروة الاستخدام العالية مما يجمد السيرفر لعدة ثوانٍ.