Golang分析內(nèi)存溢出
這里是Z哥的個(gè)人公眾號(hào)
每周五11:45 按時(shí)送達(dá)
當(dāng)然了,也會(huì)時(shí)不時(shí)加個(gè)餐~
我的第「223」篇原創(chuàng)敬上
_ "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 來(lái)設(shè)置 dump 文件的最大 size。
echo "ulimit -c unlimited" >> ~/.profile
export
export GOBACTRACE=crash

echo "export GOTRACEBACK=crash " >> ~/.profile
通過 pprof 實(shí)時(shí)分析。
程序 crash 時(shí)自動(dòng)保存 dump,再通過 delve 或者 gdb 分析。
推薦閱讀:
原創(chuàng)不易,如果你覺得這篇文章還不錯(cuò),就「點(diǎn)贊」或者「在看」一下吧,鼓勵(lì)我的創(chuàng)作 :)
也可以分享我的公眾號(hào)名片給有需要的朋友們。
如果你有關(guān)于軟件架構(gòu)、分布式系統(tǒng)、產(chǎn)品、運(yùn)營(yíng)的困惑
可以試試點(diǎn)擊「閱讀原文」
