【工具】使用 Gin 集成 pprof 进行性能调优

使用 Gin 集成 pprof 进行性能调优

一、pprof 简介

pprof 表示性能分析器(Performance Profiler),其概念和初始实现来源于Google内部的性能分析需求。pprof 在程序运行期间,定期对应用的状态数据进行采样,每次采样都会记录当前的Goroutine和函数调用栈。
Go 标准库自带了 pprof 包,集成在 net/http/pprof 中,只需几行代码即可启用。

package main

import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    go func() {
        // 在应用运行时启动 pprof 监听
        http.ListenAndServe("localhost:8080", nil)
    }()

    // 模拟业务逻辑
    select {}
}

启动程序后,访问http://localhost:6060/debug/pprof/

二、gin集成的pprof

gin作为一个轻量级、高性能的Web框架,也提供了 pprof 的集成。

  • 安装依赖
go get -u github.com/gin-contrib/pprof
  • 集成代码
package main

import (
    "github.com/gin-contrib/pprof"
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()

    // 启用 pprof 路由
    pprof.Register(r)

    // 模拟业务路由
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    r.Run(":8080") // 启动服务
}

可以通过以下命令行获取程序运行30s的pprof记录

go tool pprof http://localhost:8080/debug/pprof/profile?seconds=30 

在运行完成后,输入web可以看到可视化的结果,颜色越深的部分运行时间越长。
在这里插入图片描述
在这里插入图片描述
讲pprof运行结果中的文件路径复制到下个命令行中,可以在 localhost:9888 打开可视化界面。

go tool pprof -http=localhost:9888  你的路径\pprof\pprof.___11go_build_main_go.exe.samples.cpu.005.pb.gz

View 选项可以选择性能分析的查看模式:
在这里插入图片描述

  • Top: 按采样数据的总消耗量列出最耗时或最占资源的函数。用于快速定位占用最多 CPU 或内存的热点函数。
  • Graph: 生成函数调用的有向图,显示函数间的调用关系及耗时比例。可以用于分析调用链,定位调用关系复杂的性能瓶颈。
  • Flame Graph: 以火焰图的形式可视化程序的调用栈和性能分布,每个矩形表示一个函数,函数越宽,表示其耗时越多,调用链从下到上,越高的层级表示更深的调用。可以直观了解调用栈的分布和最耗时的函数链路。
  • Flame Graph(old): 早期版本的火焰图,与标准 Flame Graph 类似,但界面和交互稍显简陋,适用于兼容性需求。
  • Peek: 查看某个具体函数的详细调用信息,包括调用该函数的父函数、该函数调用的子函数和耗时占比,可用于深入分析单个函数的性能。
  • Source: 显示函数的源代码,并在对应代码行旁标注耗时和调用次数。可以直接定位源代码中的性能热点,结合代码优化更直观。
  • Disassemble : 查看函数的汇编代码,并标注每条指令的性能数据(例如耗时)。在极端优化场景下,用于深入分析代码的底层执行效率。

参考文章

每个程序员都应该掌握的Golang性能优化秘技 (这篇文章优化部分讲的很详细)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值