0Pricing
Go Academy · درس

إنشاء ملفات تعريف الذاكرة والتخصيص

العثور على نقاط استهلاك الذاكرة عبر ملفات تعريف heap

إنشاء ملفات تعريف الذاكرة والتخصيص درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

لماذا تنميط الكومة؟

تؤدي تخصيصات الذاكرة المفرطة إلى إبطاء برامج Go بسبب الضغط على GC. ويوضح تنميط الكومة مسارات الكود التي تخصص أكبر قدر من الذاكرة، حتى تتمكنوا من تقليل التخصيصات.

التقاط ملف تعريف الكومة

عبر نقطة نهاية HTTP (يتطلب ذلك net/http/pprof):

go tool pprof http://localhost:6060/debug/pprof/heap

ملف تعريف الكومة المستند إلى ملف

اكتبوا ملف تعريف للكومة في أي وقت باستخدام runtime/pprof:

f, _ := os.Create("mem.prof")
pprof.WriteHeapProfile(f)
f.Close()

inuse مقابل alloc

يحتوي ملف تعريف الكومة على عرضين: inuse_objects/inuse_space (العناصر الحية حاليًا) وalloc_objects/alloc_space (الإجمالي منذ بدء التشغيل). استخدموا alloc_space للعثور على مسارات التخصيص الأكثر نشاطًا.

go tool pprof -alloc_space http://localhost:6060/debug/pprof/heap

go test -memprofile

التقطوا ملف تعريف للذاكرة أثناء اختبارات Benchmark:

go test -memprofile mem.prof -benchmem -bench=BenchmarkProcess ./...

MemStats

اقرؤوا إحصاءات ذاكرة runtime برمجيًا للمراقبة المباشرة:

var ms runtime.MemStats
runtime.ReadMemStats(&ms)
fmt.Printf("Alloc: %v MiB\n", ms.Alloc/1024/1024)
fmt.Printf("NumGC: %v\n", ms.NumGC)

تحليل الهروب

تؤدي المتغيرات التي تهرب إلى الكومة إلى عمليات تخصيص. شغّلوا go build -gcflags=-m لمعرفة المتغيرات التي تهرب وسبب ذلك.

go build -gcflags="-m -m" ./...
// main.go:12:15: &User{...} escapes to heap

تقليل التخصيصات: التخصيص المسبق

خصصوا الشرائح مسبقًا باستخدام make([]T, 0, n) عندما يكون الطول النهائي معروفًا، لتجنب إعادة التخصيص المتكررة أثناء نمو الشريحة.

results := make([]Result, 0, len(input))

إعادة الاستخدام باستخدام sync.Pool

استخدموا sync.Pool لتجميع الكائنات القابلة لإعادة الاستخدام (مثل المخازن المؤقتة والشرائح المؤقتة)، وتوزيع تكلفة التخصيص على عمليات متعددة:

var pool = sync.Pool{
    New: func() any { return new(bytes.Buffer) },
}
buf := pool.Get().(*bytes.Buffer)
buf.Reset()
// use buf...
pool.Put(buf)

مستقبلات القيمة مقابل المؤشر

تُنسخ البُنى الكبيرة التي تُمرَّر بالقيمة عند كل استدعاء. مرّروها بالمؤشر لتجنب النسخ، لكن انتبهوا إلى أن المؤشرات قد تتسبب في هروب القيمة إلى الكومة.

String مقابل []byte

يؤدي التحويل بين string و[]byte إلى تخصيص. استخدموا []byte طوال مسارات التنفيذ المكثف، وحوّلوه إلى string فقط عند الحد الذي يتطلب string.

تحقق سريع

ماذا يعرض -alloc_space في ملف تعريف كومة pprof؟

مراجعة: تنميط الكومة

النقاط الأساسية:

  • -alloc_space يعرض إجمالي التخصيصات؛ وinuse_space يعرض الذاكرة الحية
  • go build -gcflags=-m يعرض تحليل الهروب
  • خصصوا الشرائح مسبقًا؛ واستخدموا sync.Pool لإعادة الاستخدام المتكرر
  • runtime.ReadMemStats للمراقبة البرمجية

الأسئلة الشائعة

هل درس «إنشاء ملفات تعريف الذاكرة والتخصيص» مجاني؟

نعم — نص درس «إنشاء ملفات تعريف الذاكرة والتخصيص» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء ملفات تعريف الذاكرة والتخصيص»؟

العثور على نقاط استهلاك الذاكرة عبر ملفات تعريف heap تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «إنشاء ملفات تعريف الذاكرة والتخصيص»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كتابة المعايير باستخدام testing.B
  2. إنشاء ملفات تعريف أداء CPU باستخدام pprof
  3. إنشاء ملفات تعريف الذاكرة والتخصيص
  4. تتبّع التنفيذ
← العودة إلى Go Academy