分析記憶體洩漏和goroutine洩漏

xing393939發表於2021-10-22

基礎介紹

分析記憶體洩漏

示例程式碼:

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 協議》,轉載必須註明作者和本文連結

相關文章