การดู : 218

25/04/2026 02:47น.

EP.107 การทำ Profiling และ Benchmark WebSocket Server

EP.107 การทำ Profiling และ Benchmark WebSocket Server

#Golang

#Benchmark

#Profiling

#WebSocket

เมื่อคุณพัฒนา WebSocket Server จนพร้อมใช้งานจริง (Production-ready) สิ่งสำคัญไม่ใช่แค่ "ระบบทำงานได้" แต่ต้อง ทำงานได้เร็ว เสถียร และใช้ทรัพยากรอย่างมีประสิทธิภาพ 🚀

 

ใน EP นี้ เราจะพาคุณเข้าสู่โลกของ Profiling และ Benchmarking เพื่อตรวจสอบว่าโค้ดของคุณทำงานได้ดีแค่ไหน พร้อมเทคนิคปรับแต่งประสิทธิภาพให้ทะลุขีดจำกัด!

 

เครื่องมือที่เราจะใช้:

  • 🔬 pprof — วิเคราะห์การใช้ CPU, Memory และ Goroutines
  • 💣 wrk — ทดสอบโหลดและความสามารถในการรับ request
  • ⚡ hey — ทดสอบ Latency และอัตราความสำเร็จของการเชื่อมต่อ

 

🧩 1. ทำไมต้องทำ Profiling และ Benchmark?

 

เพราะถ้าไม่วัดผล เราจะไม่มีทางรู้ว่าโค้ดเราช้าเพราะอะไร

สิ่งที่คุณสามารถตรวจสอบได้ เช่น:

สิ่งที่ควรรู้เพราะอะไร
จุดที่ใช้ CPU มากปรับ logic หรือหลีกเลี่ยง loop ซ้อน
จุดที่ใช้ Memory เยอะตรวจสอบ memory leak
Goroutine ค้างหรือเกินป้องกัน deadlock หรือ panic
Latency สูงหาคอขวดของการประมวลผล
รองรับกี่ connectionวางแผนขยายระบบได้แม่นยำ

 

🔍 2. การใช้ pprof วิเคราะห์โค้ดระหว่างรันจริง

 

pprof คือเครื่องมือ built-in ของ Go ที่ให้คุณดู performance ของระบบใน runtime สามารถเปิด endpoint /debug/pprof/ แล้ววิเคราะห์ผ่านเบราว์เซอร์หรือ CLI

 

ตัวอย่างโค้ดเปิด pprof

import (
	"log"
	"net/http"
	_ "net/http/pprof"
)

func main() {
	go func() {
		log.Println("Start pprof on :6060")
		log.Println(http.ListenAndServe("localhost:6060", nil))
	}()

	log.Println("WebSocket Server on :8080")
	http.ListenAndServe(":8080", nil)
}

 

⚙️ 3. การใช้ wrk ทดสอบ Load และ Throughput

 

wrk เป็นเครื่องมือ benchmark ที่สามารถยิงโหลดระดับสูงไปยัง WebSocket หรือ HTTP ได้

 

ตัวอย่างคำสั่ง:

wrk -t12 -c400 -d30s http://localhost:8080/ws
พารามิเตอร์ความหมาย
-t12ใช้ 12 threads
-c400จำลอง 400 connections
-d30sยิง request ต่อเนื่อง 30 วินาที

 

ผลลัพธ์ที่ได้จะบอก:

  • Request/sec
  • Latency เฉลี่ย
  • Transfer/sec

 

⚡ 4. การใช้ hey ตรวจสอบ Latency และ Error Rate

 

hey เป็น CLI ที่ช่วยวัด Response Time และ Stability ของระบบ

 

ติดตั้ง:

go install github.com/rakyll/hey@latest

 

ตัวอย่างการใช้:

hey -n 1000 -c 50 http://localhost:8080/ws

 

จะได้ข้อมูลเช่น:

  • 📉 Latency เฉลี่ย
  • ❌ Error rate
  • ✅ Success rate

 

🧠 5. เทคนิค Optimize สำหรับ Production

 

หลังจากได้ผลการวัดประสิทธิภาพแล้ว ให้ใช้ข้อมูลเพื่อปรับระบบ:

ปัญหาแนวทางแก้
CPU ใช้สูงใช้ Goroutine Pool / ลดการ parse JSON
Memory สูงใช้ sync.Pool สำหรับ reuse buffer
Latency สูงใช้ binary protocol / ลดการ compress
Connection หลุดบ่อยปรับ timeout และ retry logic
GC หนักปรับ runtime.GCPercent / เช็ค memory leak

 

📊 6. ตัวอย่างการสรุปผล Benchmark

 

Metricค่าเฉลี่ยเป้าหมายที่ดี
Latency8.5 ms< 10 ms
Throughput22,000 req/sec> 20,000
Memory Usage85 MB< 100 MB
Error Rate0.03%< 0.1%

 

สรุปผลเหล่านี้ในทุก Sprint จะช่วยให้คุณวางแผน scaling และ optimize ระบบได้แบบมืออาชีพ

 

🚀 ท้าให้ลอง!

 

  1. ลองเปิด pprof บน WebSocket Server จริงของคุณ
  2. ใช้ wrk และ hey ยิงทดสอบจากเครื่องอื่น
  3. เปรียบเทียบ “ก่อน” และ “หลัง optimize”
  4. ทำ Dashboard สรุปผลเทียบทุก Sprint

 


 

🌟 EP ถัดไป

 

📘 EP.108: การจัดการ Timeout และ Connection Cleanup แบบ Advanced เราจะพูดถึงเทคนิคจัดการ connection ที่หลุด ช้า หรือ idle เพื่อป้องกัน resource leak และทำให้ระบบเสถียรยิ่งขึ้นใน production!

 

อ่านบทความ Series อื่นๆ

🔵 Facebook: https://www.facebook.com/superdev.academy.th

🔴 YouTube : Superdev Academy

📸 Instagram: Superdev Academy

🎬 TikTok: https://www.tiktok.com/@superdevacademy?lang=th-TH

🌐 Website: https://www.superdevacademy.com/