การทำโปรไฟล์ CPU ด้วย pprof
เก็บรวบรวมและแสดงภาพโปรไฟล์ CPU
การทำโปรไฟล์ CPU ด้วย pprof เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
pprof คืออะไร
แพ็กเกจ net/http/pprof และ runtime/pprof เปิดเผยข้อมูลการสร้างโพรไฟล์ที่แสดงว่าโปรแกรมใช้เวลา CPU ไปที่ใด ส่วน CLI go tool pprof ใช้วิเคราะห์โพรไฟล์
ปลายทาง pprof ของ HTTP
นำเข้า _ "net/http/pprof" เพื่อลงทะเบียนปลายทางการสร้างโพรไฟล์ภายใต้ /debug/pprof/ บนเซิร์ฟเวอร์ HTTP ที่มีอยู่
import _ "net/http/pprof"
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()การเก็บโพรไฟล์ CPU
เก็บโพรไฟล์ CPU เป็นเวลา 30 วินาทีผ่านปลายทาง HTTP:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30การสร้างโพรไฟล์ CPU แบบใช้ไฟล์
สำหรับโปรแกรมที่ไม่มีเซิร์ฟเวอร์ HTTP ให้ใช้ runtime/pprof เพื่อเขียนโพรไฟล์ลงไฟล์:
f, _ := os.Create("cpu.prof")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
// run workloadการสร้างโพรไฟล์ในการทดสอบ
เรียกใช้การทดสอบด้วยแฟล็ก -cpuprofile และ -memprofile เพื่อสร้างโพรไฟล์ภายใต้ภาระงานทดสอบที่ใกล้เคียงการใช้งานจริง:
go test -cpuprofile cpu.prof -memprofile mem.prof -bench=. ./...โหมดโต้ตอบของ go tool pprof
เปิดโพรไฟล์และสำรวจด้วยคำสั่งโต้ตอบ:
go tool pprof cpu.prof
(pprof) top # top functions by CPU time
(pprof) list main # annotated source
(pprof) web # call graph in browserกราฟเปลวไฟ
สร้างกราฟเปลวไฟ (ต้องใช้ graphviz) ด้วย -http=:8080 เพื่อเปิดส่วนติดต่อผู้ใช้บนเว็บแบบโต้ตอบ:
go tool pprof -http=:8080 cpu.profการตีความผลลัพธ์ของ top
top แสดงฟังก์ชันเรียงตามเวลาเฉพาะตัว (เวลาที่ใช้ในฟังก์ชันนั้น) และเวลาสะสม (รวมเวลาของฟังก์ชันที่ถูกเรียก) ให้มุ่งเน้นฟังก์ชันที่มีเวลาเฉพาะตัวสูงเพื่อค้นหาโอกาสในการปรับปรุงโดยตรง
โพรไฟล์ Goroutine
ปลายทาง /debug/pprof/goroutine แสดงร่องรอยสแตกของ Goroutine ทั้งหมด ใช้เพื่อตรวจหาการรั่วไหลของ Goroutine หรือ Goroutine ที่ถูกบล็อก
go tool pprof http://localhost:6060/debug/pprof/goroutineการสร้างโพรไฟล์อย่างต่อเนื่อง
สำหรับระบบที่ใช้งานจริง ให้ใช้บริการสร้างโพรไฟล์อย่างต่อเนื่อง (Pyroscope, Datadog, Google Cloud Profiler) เพื่อเก็บโพรไฟล์โดยไม่ต้องหยุดบริการ
pprof ใน CI
เปรียบเทียบโพรไฟล์จากโค้ดสองเวอร์ชันเพื่อตรวจหาประสิทธิภาพที่ถดถอยก่อนที่ปัญหาจะไปถึงระบบที่ใช้งานจริง
ตรวจสอบความเข้าใจ
คอลัมน์ "self" ในผลลัพธ์ top ของ pprof แสดงถึงอะไร
สรุป: การสร้างโพรไฟล์ CPU ด้วย pprof
ประเด็นสำคัญ:
- นำเข้า net/http/pprof สำหรับปลายทาง HTTP และ runtime/pprof สำหรับไฟล์
- ใช้ go tool pprof -http=:8080 เพื่อเปิดส่วนติดต่อผู้ใช้แบบกราฟเปลวไฟ
- top: เวลาเฉพาะตัว = ต้นทุนโดยตรง; เวลาสะสม = ต้นทุนทั้งหมดรวมฟังก์ชันที่ถูกเรียก
- ใช้ go test -cpuprofile สำหรับการสร้างโพรไฟล์การวัดประสิทธิภาพ
คำถามที่พบบ่อย
บทเรียน “การทำโปรไฟล์ CPU ด้วย pprof” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทำโปรไฟล์ CPU ด้วย pprof” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทำโปรไฟล์ CPU ด้วย pprof”
เก็บรวบรวมและแสดงภาพโปรไฟล์ CPU คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การทำโปรไฟล์ CPU ด้วย pprof” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเขียนการทดสอบประสิทธิภาพด้วย testing.B
- การทำโปรไฟล์ CPU ด้วย pprof
- การทำโปรไฟล์ฮีปและการจัดสรรหน่วยความจำ
- การติดตามการทำงาน