การติดตามการทำงาน
ใช้ go tool trace เพื่อวิเคราะห์ในระดับกอรูทีน
การติดตามการทำงาน เป็นบทเรียน 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.outtrace แบบใช้ไฟล์
ใช้ runtime/trace เพื่อบันทึก trace ด้วยโปรแกรม:
f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
// run workloadgo 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเขียนการทดสอบประสิทธิภาพด้วย testing.B
- การทำโปรไฟล์ CPU ด้วย pprof
- การทำโปรไฟล์ฮีปและการจัดสรรหน่วยความจำ
- การติดตามการทำงาน