基礎介紹
- 實戰Go記憶體洩露
- Hi, 使用多年的go pprof檢查記憶體洩漏的方法居然是錯的
- 如何使用pprof見之前的文章使用pprof進行效能分析
分析記憶體洩漏
示例程式碼:
package main
import (
"net/http"
_ "net/http/pprof"
"time"
)
func main() {
// 開啟pprof
go func() {
http.ListenAndServe("0.0.0.0:6060", nil)
}()
tick := time.Tick(time.Second / 100)
var buf []byte
for range tick {
buf = append(buf, make([]byte, 1024*1024)...)
}
}
匯出時間點1的堆的profile: curl -s http://127.0.0.1:6060/debug/pprof/heap > base.heap
匯出時間點2的堆的profile: curl -s http://127.0.0.1:6060/debug/pprof/heap > current.heap
go tool pprof –http :8080 –base base.heap current.heap
分析goroutine洩漏
訪問http://ip:port/debug/pprof/goroutine?debug=1
其中展示的資訊如下:
通過持續觀察第一行的goroutine profile total展示的goroutine數量來判斷是否有goroutine洩漏,同時可以檢視其中的goroutine都卡在程式碼的哪一行。
訪問http://ip:port/debug/pprof/goroutine?debug=2
可以檢視其中的goroutine已經執行了多久。
本作品採用《CC 協議》,轉載必須註明作者和本文連結