Golang程序调试 -- 内存泄漏pprof工具

Golang程序调试 -- 内存泄漏pprof工具

  • 代码引入pprof
  • WEB访问模式
  • 命令行模式定位内存
  • 命令行模式定位耗时
  • 命令行模式定位内存分配

代码引入pprof

import (
	"net/http"
	_ "net/http/pprof"
)
func main() {
	go func() {
		http.ListenAndServe("0.0.0.0:60001", nil)
	}()
	//...
	select {}
}

上述事例我暴露出得端口号为60001,可自定义一个未使用的端口号即可

WEB访问模式

直接打开浏览器输入http://ip:60001/debug/pprof
上述的IP为程序所执行的环境暴露的IP地址;

命令行模式定位内存

#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/heap
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.malg

命令行模式定位耗时

#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/profile
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject

命令行模式定位内存分配

#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/allocs
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject

# 命令行模式定位协程泄漏
```shell
#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/goroutine
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject

# 命令行模式定位锁竞争
```shell
#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/mutex
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject

你可能感兴趣的:(Golang笔记,golang,linux,服务器)