net/http/pprof ############## 用法1-web服务:: 只需要引入包_ "net/http/pprof" 然后就可以在浏览器中使用: http://localhost:port/debug/pprof/ 直接看到当前web服务的状态, 包括CPU占用情况和内存使用情况等 用法2-服务进程:: 也可以选择使用net/http/pprof包 开启另外一个goroutine来开启端口监听 比如: go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }() 可通过 http://localhost:6060/debug/pprof/CMD 获取对应的采样数据。支持的 CMD 有:: goroutine: 获取程序当前所有 goroutine 的堆栈信息 heap: 包含每个 goroutine 分配大小,分配堆栈等 每分配 runtime.MemProfileRate(默认为512K)个字节进行一次数据采样 threadcreate: 获取导致创建 OS 线程的 goroutine 堆栈 block: 获取导致阻塞的 goroutine 堆栈(如: channel, mutex等) 使用前需要先调用 runtime.SetBlockProfileRate mutex: 获取导致 mutex 争用的 goroutine 堆栈 使用前需要先调用 runtime.SetMutexProfileFraction http://localhost:6060/debug/pprof/goroutine?debug=2:: 有相似的返回值(goroutine 堆栈),它们都支持一个 debug URL参数 1. 默认为0,此时返回的采样数据是不可人为解读的函数地址列表,需要结合 pprof 工具才能还原函数名字 2. debug=1时,会将函数地址转换为函数名,即脱离 pprof 在浏览器中直接查看 3. debug=2,此时将以 unrecovered panic 的格式打印堆栈,可读性更高 除此之外,go pprof 的 CMD 还包括:: cmdline: 获取程序的命令行启动参数 profile: 获取指定时间内(从请求时开始)的cpuprof,倒计时结束后自动返回 参数: seconds, 默认值为30。cpuprofile 每秒钟采样100次,收集当前运行的 goroutine 堆栈信息 symbol: 用于将地址列表转换为函数名列表,地址通过’+’分隔, 如: URL/debug/pprof?0x18d067f+0x17933e7 trace: 对应用程序进行执行追踪,参数: seconds, 默认值1s