เนื่องจากต้องมาดู 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 ครับ