其他
Golang分析内存溢出
The following article is from 跨界架构师 Author Zachary
大家好,我是Z哥。
_ "net/http/pprof"
go func() {
http.ListenAndServe("0.0.0.0:8899", nil) //ip和端口可以更换
}()
阻塞分析。比如,goroutine 的 wait。
内存分析。比如,内存泄漏、内存消耗异常等情况。
互斥锁分析。比如,观察代码里用到的 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:当前函数所占用的容量。
flat%:当前函数所占用的容量,在总分配容量的百分比。
sum%:是从调用的最外层到当前方法累加使用的容量占总容量的百分比
cum:当前函数以及子函数所占用的容量。
cum%:当前函数以及子函数所占用的容量,在总分配容量的百分比。
最后一列是函数的名字
list main.main
ulimit -c 1024 或者 ulimit -c unlimited 来设置 dump 文件的最大 size。
echo "ulimit -c unlimited" >> ~/.profile
export
export GOBACTRACE=crash
echo "export GOTRACEBACK=crash " >> ~/.profile
通过 pprof 实时分析。
程序 crash 时自动保存 dump,再通过 delve 或者 gdb 分析。
往期推荐
手撕 Golang 高性能内存缓存库 bigcache! #4
一文告诉你Go 1.19都有哪些新特性
想要了解Go更多内容,欢迎扫描下方👇 关注 公众号,回复关键词 [实战群] ,就有机会进群和我们进行交流~
分享、在看与点赞,至少我要拥有一个叭~