Golang分析內(nèi)存溢出
大家好,我是Z哥。
_ "net/http/pprof"go func() {http.ListenAndServe("0.0.0.0:8899", nil) //ip和端口可以更換}()

阻塞分析。比如,goroutine 的 wait。
內(nèi)存分析。比如,內(nèi)存泄漏、內(nèi)存消耗異常等情況。
互斥鎖分析。比如,觀察代碼里用到的 sync.RWMutex 和 sync.Mutex 的具體情況。
CPU 分析。比如,排查哪些代碼較多地占用了 CPU 資源。
通過url。go tool pprof http://localhost:8899/debug/pprof/profile
通過文件。go tool pprof cpuprofile 文件路徑
func main() {go func() {http.ListenAndServe("0.0.0.0:8899", nil)}()str := "sadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasfsadasdasffrgrgrgrgrgrfefafasf"for i := 0; i < 999; i++ {str += str}fmt.Scanln()}

go tool pprof http://localhost:8899/debug/pprof/heap

flat:當(dāng)前函數(shù)所占用的容量。
flat%:當(dāng)前函數(shù)所占用的容量,在總分配容量的百分比。
sum%:是從調(diào)用的最外層到當(dāng)前方法累加使用的容量占總?cè)萘康陌俜直?/span>
cum:當(dāng)前函數(shù)以及子函數(shù)所占用的容量。
cum%:當(dāng)前函數(shù)以及子函數(shù)所占用的容量,在總分配容量的百分比。
最后一列是函數(shù)的名字
list main.main



ulimit -c 1024 或者 ulimit -c unlimited 來設(shè)置 dump 文件的最大 size。
echo "ulimit -c unlimited" >> ~/.profile
export
export GOBACTRACE=crash

echo "export GOTRACEBACK=crash " >> ~/.profile
通過 pprof 實時分析。
程序 crash 時自動保存 dump,再通過 delve 或者 gdb 分析。
往期推薦
想要了解Go更多內(nèi)容,歡迎掃描下方?? 關(guān)注 公眾號,回復(fù)關(guān)鍵詞 [實戰(zhàn)群] ,就有機會進群和我們進行交流~
分享、在看與點贊,至少我要擁有一個叭~

評論
圖片
表情



