go内存泄露排查

1、memory profile方式查看

查看内存消耗位置

代码添加:

import _ "net/http/pprof"  
  
func main() {  
    go func() {  
        http.ListenAndServe("localhost:6060", nil)  
    }()  
}  

运行:

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

使用top命令:

185729_VauK_1464648.png

官方使用方式:

https://blog.golang.org/profiling-go-programs

2、观察gorountine

是否gorountine没有回收一直增长

代码添加:

// goroutine stats and pprof  
go func() {  
    http.HandleFunc("/goroutines", func(w http.ResponseWriter, r *http.Request) {  
        num := strconv.FormatInt(int64(runtime.NumGoroutine()), 10)  
        w.Write([]byte(num))  
    });  
    http.ListenAndServe("localhost:6060", nil)  
    glog.Info("goroutine stats and pprof listen on 6060")  
}()  

使用命令:

curl localhost:6060/goroutines

3、结论:

从整体内存使用状态来看主要是zk连接使用内存没有回收

4、排查死锁

代码添加

import _ "net/http/pprof"  
  
func main() {  
    go func() {  
        http.ListenAndServe("localhost:6060", nil)  
    }()  
}  

查看详细goroutine状态

120733_4Hit_1464648.png

转载于:https://my.oschina.net/zhangxc73912/blog/1627410

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值