تتبّع التنفيذ
استخدام go tool trace لتحليل مستوى Goroutines
تتبّع التنفيذ درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما هو تتبع التنفيذ؟
يسجل متتبع تنفيذ Go مخططًا زمنيًا لجدولة goroutine وأحداث GC واستدعاءات النظام ونمو الكومة. ويوفر عرضًا مرئيًا للتوازي ووقت الاستجابة لا توفره ملفات تعريف CPU أو الكومة.
التقاط تتبع
التقطوا تتبعًا عبر نقطة نهاية HTTP:
curl http://localhost:6060/debug/pprof/trace?seconds=5 -o trace.out
go tool trace trace.outتتبع مستند إلى ملف
استخدموا runtime/trace لتسجيل تتبع برمجيًا:
f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
// run workloadgo test -trace
التقطوا تتبعًا أثناء تشغيل الاختبارات أو اختبارات Benchmark:
go test -trace trace.out -bench=. ./...
go tool trace trace.outعارض التتبع
يفتح عارض التتبع (go tool trace) في متصفح، ويعرض مخططات goroutine الزمنية وأحداث GC وحجم الكومة ومكدسات الاستدعاء لكل goroutine في أي لحظة.
تحليل Goroutine
يجمع عرض تحليل Goroutine goroutine حسب الدالة، ويوضح المدة التي تقضيها كل واحدة في الحالات التالية: running (قيد التشغيل)، وrunnable (بانتظار P)، وblocked (محجوبة بسبب channel أو mutex أو syscall)، وsleeping (في وضع السكون).
العثور على زمن استجابة المجدول
يعني ارتفاع وقت "runnable" أن goroutine جاهزة، لكنها لم تُجدول بعد. ويشير ذلك إلى تنافس عدد كبير جدًا من goroutine على Ps الخاصة بـ GOMAXPROCS، أو إلى أن العملية تفتقر إلى وقت CPU.
تأثير GC
تظهر فترات توقف GC من نوع stop-the-world على شكل أشرطة رمادية عبر جميع goroutine. وتشير الفترات الطويلة أو تكرار GC إلى تخصيص مفرط؛ فادمجوا ذلك مع تنميط الكومة لتقليل التخصيصات.
تعليقات المستخدم
أضيفوا مقاطع مخصصة إلى التتبع باستخدام trace.WithRegion وtrace.Log لوضع تعليقات على أقسام الكود الخاصة بكم وتسهيل تحليلها.
trace.WithRegion(ctx, "parse request", func() {
parseRequest(req)
})task و region
يجمع trace.NewTask المناطق المرتبطة ضمن task ذات اسم، ما يتيح لكم قياس وقت الاستجابة من البداية إلى النهاية لعملية منطقية تمتد عبر عدة goroutine.
ctx, task := trace.NewTask(ctx, "handle request")
defer task.End()التتبع مقابل ملف التعريف
ملف تعريف CPU: ما الدوال التي تستهلك CPU بمرور الوقت. ملف تعريف الكومة: ما الدوال التي تخصص الذاكرة. التتبع: متى تعمل goroutine أو تُحجب، وكيف تتداخل معها عمليات GC؛ وهي أدوات مختلفة لأسئلة مختلفة.
تحقق سريع
ماذا تعني حالة goroutine "runnable" في تتبع التنفيذ؟
مراجعة: تتبع التنفيذ
النقاط الأساسية:
- يعرض go tool trace المخططات الزمنية لـ goroutine وأحداث GC والجدولة
- التقاط التتبع عبر نقطة نهاية HTTP أو حزمة runtime/trace
- وقت runnable ← تنافس على المجدول؛ وفترات توقف GC ← تخصيصات مفرطة
- تعليقات المستخدم (WithRegion وNewTask) تحدد أقسام الكود الخاصة بكم
الأسئلة الشائعة
هل درس «تتبّع التنفيذ» مجاني؟
نعم — نص درس «تتبّع التنفيذ» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «تتبّع التنفيذ»؟
استخدام go tool trace لتحليل مستوى Goroutines تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تتبّع التنفيذ»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كتابة المعايير باستخدام testing.B
- إنشاء ملفات تعريف أداء CPU باستخدام pprof
- إنشاء ملفات تعريف الذاكرة والتخصيص
- تتبّع التنفيذ