Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

สรุปการทำ profiling ระบบ Web application ที่พัฒนาด้วยภาษา Golang

$
0
0

เนื่องจากต้องมาดู performace ของระบบ web application ที่พัฒนาด้วยภาษา Golang นิดหน่อย จึงทำการสรุปสิ่งที่ต้องใช้งานไว้นิดหน่อย เครื่องมือที่ใช้งานคือ pprof ประกอบไปด้วย
  • CPU profile
  • Heap profile
  • Goroutine profile
ใช้งาน pprof version ใหม่ด้วยนะ ทำการติดตั้งด้วยคำสั่ง [code] go get github.com/google/pprof [/code]

จัดเตรียม 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 ครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles