Memory Optimization
🧰 1. Tối Ưu Hóa Bộ Nhớ (Memory Optimization)
✅ Tránh Escape to Heap không cần thiết
Escape analysis giúp Go xác định biến nên ở stack hay heap. Tránh escape nếu không cần thiết.
✅ Tối ưu: nếu không cần con trỏ, dùng giá trị:
✅ Preallocate slice/map khi có thể
⚙️ 2. Tối Ưu CPU và Goroutine
✅ Dùng worker pool thay vì tạo goroutine vô hạn
✅ Dùng sync.Pool
để reuse object
sync.Pool
để reuse object🕵️ 3. Tối Ưu GC (Garbage Collector)
✅ Hạn chế tạo object không cần thiết trong hot path
Tránh
string concatenation
trong vòng lặpTránh
interface{}
nếu có thể – gây allocation và mất type info
✅ Dùng struct thay vì map nếu có schema cố định
🕸️ 4. Tối Ưu Concurrent Code
✅ Hạn chế mutex nếu không cần thiết
Dùng channel để giao tiếp nếu có thể
Nếu dùng
sync.Mutex
, đảm bảo vùng critical nhỏ nhất có thể
✅ Tránh deadlock, race condition
Luôn chạy với:
go run -race main.go
📊 5. Dùng Profiler để đo, không đoán
✅ Tích hợp net/http/pprof
Sau đó truy cập: http://localhost:6060/debug/pprof/
heap
→ memoryprofile
→ CPUgoroutine
→ số lượng goroutine
✅ Dùng công cụ:
go tool pprof
benchstat
,go test -bench
,trace
golangci-lint
→ kiểm tra static code
🚀 6. Những Best Practices Khác
✅ Tránh reflection (reflect
), trừ khi bất khả kháng
reflect
), trừ khi bất khả kháng✅ Dùng const
, iota
thay vì magic string/number
const
, iota
thay vì magic string/number✅ Tránh tạo interface nếu chỉ có một implementation
🧠 Kinh nghiệm thực chiến
API latency cao
Giảm GC pressure, giảm object alloc
Worker CPU 100%
Profile goroutine leak hoặc contention
Tốn RAM nhiều
Check heap profile, object retention
Goroutine tăng liên tục
Có thể là leak hoặc không đóng channel
Last updated