大家好,我是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 分析。
往期推荐
想要了解Go更多内容,欢迎扫描下方👇 关注 公众号,回复关键词 [实战群] ,就有机会进群和我们进行交流~
分享、在看与点赞,至少我要拥有一个叭~
原文始发于微信公众号(GoCN):Golang分析内存溢出
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论