golang 性能分析(pprof)

采样方式

net/http/pprof

  • 适用于程序长期运行的线上服务
    • 底层也是调用的 runtime/pprof 提供的函数,封装成接口对外提供网络访问
  • 如果是使用了HTTP包的路由,则只需要import _ "net/http/pprof"即可
    • 此时会自动把相关路由路径注册到了默认的http.DefaultServeMux
package pprof

func init() {
   
	http.HandleFunc("/debug/pprof/", Index)
	http.HandleFunc("/debug/pprof/cmdline", Cmdline)
	http.HandleFunc("/debug/pprof/profile", Profile)
	http.HandleFunc("/debug/pprof/symbol", Symbol)
	http.HandleFunc("/debug/pprof/trace", Trace)
}
  • 如果使用了第三方server(例如gin),则需要手动注册路由
    • gin还可以直接使用github.com/DeanThompson/ginpprof包,只需要ginpprof.Wrap(router)即可
package main

import (
	"github.com/gin-gonic/gin"
	"github.com/DeanThompson/ginpprof"
)

func main() {
   
	router := gin.Default()
	
	// automatically add routers for net/http/pprof
	// e.g. /debug/pprof, /debug/pprof/heap, etc.
	ginpprof.Wrap(router)
	// ginpprof also plays well with *gin.RouterGroup
	// group := router.Group("/debug/pprof")
	// ginpprof.WrapGroup(group)
}

benchmark pprof

  • 命令行

    • 生成分析文件: go test -bench <bench_func> -run none -cpuprofile <cpu.prof>
      • 除了-cpuprofile, 还有-benchmem -memprofile-blockprofile等指标
  • Goland
    在这里插入图片描述

runtime/pprof

  • 适用于程序只运行一次就停的,例如每天只跑一次的离线预处理程序
  • 运行程序后生成cpu.profmem.prof两个文件
import "runtime/pprof"

func main() {
   
    f, _ :=
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值