เนื่องจากต้องมาดู performace ของระบบ web application ที่พัฒนาด้วยภาษา Golang นิดหน่อย
จึงทำการสรุปสิ่งที่ต้องใช้งานไว้นิดหน่อย
เครื่องมือที่ใช้งานคือ pprof
ประกอบไปด้วย
- CPU profile
- Heap profile
- Goroutine profile
ใช้งาน pprof version ใหม่ด้วยนะ
ทำการติดตั้งด้วยคำสั่ง
go get -u github.com/google/pprof
จัดเตรียม code ของระบบกันนิดหน่อย
ซึ่งจะใช้งาน package net/http/pprof
และทำการ custom URL ของ pprof เพิ่มเติมนิดหน่อย เพื่อไว้ใช้งาน
เขียน code ง่าย ๆ ได้ดังนี้
จากนั้นทำการ build จะได้ไฟล์ binary ของระบบหรือ service มา
จากตัวอย่างชื่อว่า demo
ดังนั้นทำการ run demo ขึ้นมา (นั่นคือการ start server ของระบบหรือ service)
เมื่อทุกอย่างพร้อม มาเริ่มต้นกันเลย
ให้ทำการยิง load test ไปยัง endpoint ของ service ที่เราต้องการ
สามารถใช้เครื่องมือง่าย ๆ เช่น Apache Wekrbench และ wrk เป็นต้น
ยกตัวอย่างเช่น
$ab -k -c 10 -n 1000000 "http://127.0.0.1:8080/"
ในระหว่างนั้นทำการ run pprof เลย
ดูการใช้งาน CPU ด้วยคำสั่ง
$pprof demo http://127.0.0.1:8080/debug/pprof/profile
จะใช้เวลาการทำงานนานนิดหน่อย
เนื่องจากจะจัดเก็บข้อมูลจากการทดสอบ service นั่นเอง
ที่สำคัญ เราสามารถใช้ pprof บน production environment ได้เลย
เนื่องจากมี overhead น้อยมาก ๆ
เมื่อเข้ามาใช้งานแล้ว ดู method ที่ใช้งาน CPU มาก ๆ ด้วยคำสั่ง top
หรือถ้าต้องการดูเป็นรูปสวย ๆ ก็ใช้คำสั่ง web
ผลที่ได้มาคือ ไฟล์ SVG ดังรูป
แต่ถ้าต้องการดูผ่าน web แบบ interactive ก็ทำได้
ด้วยคำสั่งดังนี้
$pprof -http=:8888 ชื่อ profile
ได้ผลดังนี้
สามารถดูข้อมูลในรูปแบบต่าง ๆ ได้เลย
ทั้ง top, graph, peak และ detail
ยังไม่พอนะ สามารถค้นหาข้อมูลได้อีก
แสดงดังรูป
ผลลัพธ์ที่ได้จากการทำ profiling นั้น
ช่วยทำให้เราเห็นว่าปัญหาอยู่ส่วนไหน
จากนั้นก็ลงมือแก้ไขได้ง่ายขึ้น
สามารถดูส่วนอื่น ๆ ได้อีกเช่น
$pprof demo http://127.0.0.1:8080/debug/pprof/heap $pprof demo http://127.0.0.1:8080/debug/pprof/goroutine $pprof demo http://127.0.0.1:8080/debug/pprof/block
และยังมีวิธีการอื่น ๆ อีก เช่น Benchmark และ Escape analysis เป็นต้น
ขอให้สนุกกับการ coding ครับ