Go Academy · บทเรียน

การติดตามการทำงาน

ใช้ go tool trace เพื่อวิเคราะห์ในระดับกอรูทีน

บทเรียน 4 จาก 413 ขั้นตอน

การติดตามการทำงาน เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

การติดตามการทำงานคืออะไร

ตัวติดตามการทำงานของ Go จะบันทึกไทม์ไลน์ของการจัดตาราง Goroutine เหตุการณ์ GC การเรียกระบบ และการเติบโตของฮีป โดยให้มุมมองแบบภาพของการทำงานพร้อมกันและเวลาแฝง ซึ่งไม่มีในโพรไฟล์ CPU หรือฮีป

การเก็บ trace

เก็บ trace ผ่านปลายทาง HTTP:

curl http://localhost:6060/debug/pprof/trace?seconds=5 -o trace.out
go tool trace trace.out

trace แบบใช้ไฟล์

ใช้ runtime/trace เพื่อบันทึก trace ด้วยโปรแกรม:

f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
// run workload

go test -trace

เก็บ trace ระหว่างการทดสอบหรือการวัดประสิทธิภาพ:

go test -trace trace.out -bench=. ./...
go tool trace trace.out

ตัวแสดง trace

ตัวแสดง trace (go tool trace) จะเปิดในเบราว์เซอร์และแสดงไทม์ไลน์ของ Goroutine เหตุการณ์ GC ขนาดฮีป และร่องรอยสแตกของแต่ละ Goroutine ณ ช่วงเวลาใดก็ได้

การวิเคราะห์ Goroutine

มุมมองการวิเคราะห์ Goroutine จะจัดกลุ่ม Goroutine ตามฟังก์ชัน และแสดงว่าแต่ละ Goroutine อยู่ในสถานะต่าง ๆ นานเท่าใด ได้แก่ กำลังทำงาน พร้อมทำงาน (รอ P) ถูกบล็อก (แชนเนล/มิวเทกซ์/การเรียกระบบ) และพักอยู่

การค้นหาเวลาแฝงของตัวจัดตาราง

เวลา "runnable" ที่สูงหมายความว่า Goroutine พร้อมทำงานแต่ยังไม่ได้รับการจัดตาราง นี่อาจบ่งชี้ว่ามี Goroutine จำนวนมากเกินไปกำลังแย่งใช้ P ของ GOMAXPROCS หรือกระบวนการกำลังขาดแคลน CPU

ผลกระทบของ GC

การหยุดระบบเพื่อทำ GC จะปรากฏเป็นแถบสีเทาพาดผ่าน Goroutine ทั้งหมด การหยุดที่นานหรือ GC ที่เกิดบ่อยบ่งชี้ว่ามีการจัดสรรมากเกินไป — ให้ใช้ร่วมกับการสร้างโพรไฟล์ฮีปเพื่อลดการจัดสรร

คำอธิบายประกอบโดยผู้ใช้

เพิ่มช่วงกำหนดเองลงใน trace ด้วย trace.WithRegion และ trace.Log เพื่อใส่คำอธิบายประกอบให้ส่วนโค้ดของคุณเองและวิเคราะห์ได้ง่ายขึ้น

trace.WithRegion(ctx, "parse request", func() {
    parseRequest(req)
})

งานและภูมิภาค

trace.NewTask จะจัดกลุ่มภูมิภาคที่เกี่ยวข้องไว้ภายใต้งานที่มีชื่อ ทำให้คุณวัดเวลาแฝงตั้งแต่ต้นจนจบของการดำเนินการเชิงตรรกะที่ทำงานข้ามหลาย Goroutine ได้

ctx, task := trace.NewTask(ctx, "handle request")
defer task.End()

Trace เทียบกับโพรไฟล์

โพรไฟล์ CPU: ฟังก์ชันใดใช้ CPU ตามช่วงเวลา โพรไฟล์ฮีป: ฟังก์ชันใดจัดสรรหน่วยความจำ Trace: Goroutine ทำงานและถูกบล็อกเมื่อใด รวมถึง GC แทรกการทำงานอย่างไร เครื่องมือแต่ละชนิดเหมาะกับคำถามที่แตกต่างกัน

ตรวจสอบความเข้าใจ

สถานะ Goroutine แบบ "runnable" หมายความว่าอย่างไรใน trace การทำงาน

สรุป: การติดตามการทำงาน

ประเด็นสำคัญ:

  • go tool trace แสดงไทม์ไลน์ของ Goroutine เหตุการณ์ GC และการจัดตาราง
  • เก็บ trace ผ่านปลายทาง HTTP หรือแพ็กเกจ runtime/trace
  • เวลา Runnable → การแย่งใช้ตัวจัดตาราง; การหยุดของ GC → การจัดสรรมากเกินไป
  • คำอธิบายประกอบโดยผู้ใช้ (WithRegion, NewTask) ใช้ระบุส่วนโค้ดของคุณเอง
เริ่มต้นได้ฟรี

เรียนรู้ Go ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

คำถามที่พบบ่อย

บทเรียน “การติดตามการทำงาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การติดตามการทำงาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การติดตามการทำงาน”

ใช้ go tool trace เพื่อวิเคราะห์ในระดับกอรูทีน คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การติดตามการทำงาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเขียนการทดสอบประสิทธิภาพด้วย testing.B
  2. การทำโปรไฟล์ CPU ด้วย pprof
  3. การทำโปรไฟล์ฮีปและการจัดสรรหน่วยความจำ
  4. การติดตามการทำงาน
← กลับไปที่ Go Academy