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