Quantcast
Viewing all articles
Browse latest Browse all 2067

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

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.
เนื่องจากต้องมาดู 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 ดังรูป Image may be NSFW.
Clik here to view.

แต่ถ้าต้องการดูผ่าน web แบบ interactive ก็ทำได้

ด้วยคำสั่งดังนี้ [code] $pprof -http=:8888 ชื่อ profile [/code] ได้ผลดังนี้ สามารถดูข้อมูลในรูปแบบต่าง ๆ ได้เลย ทั้ง top, graph, peak และ detail ยังไม่พอนะ สามารถค้นหาข้อมูลได้อีก แสดงดังรูป Image may be NSFW.
Clik here to view.
ผลลัพธ์ที่ได้จากการทำ 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 2067

Trending Articles