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

ops/2024/12/20 1:14:32/

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

pprof__1">一、pprof 简介

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

package mainimport ("net/http"_ "net/http/pprof"
)func main() {go func() {// 在应用运行时启动 pprof 监听http.ListenAndServe("localhost:8080", nil)}()// 模拟业务逻辑select {}
}

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

ginpprof_23">二、gin集成的pprof

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

  • 安装依赖
go get -u github.com/gin-contrib/pprof
  • 集成代码
package mainimport ("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性能优化秘技 (这篇文章优化部分讲的很详细)


http://www.ppmy.cn/ops/143336.html

相关文章

vue 响应式数据原理

发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Vue 的响应式数据原理是其核心功能之一,它使得 Vue 应用能够自动响应数据的变化,并在数据变化时自动更新…

【每日一题 基础题】[蓝桥杯 2020 省 AB3] 乘法表

[蓝桥杯 2020 省 AB3] 乘法表 乘法表 九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。 例如, 四进制下的乘法表如下所示: 1 * 11 2 * 12 2 * 210 3 * 13 3 * 212 3 * 321 请注意,乘法表中两个数相乘的顺序必须为样例…

【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯

关键词:鸿蒙、ArkTs、Web组件、通讯、数据 官方文档Web组件用法介绍:文档中心 Web 组件加载沙箱中页面可参考我的另一篇文章:【HarmonyOS NEXT】 如何将rawfile中文件复制到沙箱中_鸿蒙rawfile 复制到沙箱-CSDN博客 目录 如何在鸿蒙应用中加…

vue_shop项目

项目描述: 实现效果: 在终端中输入命令: 查看工作区是否干净:git status 创建分支名字为login:git checkout -b login 查看现有的分支:git branch 现在就有主 分支(master)和登录分支(login)了 可以在项目…

M9384B丨微波信号发生器

——新利通仪器仪表—— M9384B丨微波信号发生器 M9384B VXG 是是德科技首款能够生成高达 44 GHz 信号的双通道微波信号发生器。 性能可靠,通用测试功能 特点 XLT 宽广的射频带宽(2 GHz) 大输出功率可以对系统损耗进行补偿,…

期末复习-计算机网络

目录 第五章:运输层 1.运输层协议概述(进程之间的通信,运输层的端口) 2.用户数据报协议 UDP(特点、首部格式) 3.传输控制协议 TCP(特点、套接字、可靠传输的工作原理、首部格式) …

艾体宝案例丨CircleCI 助力 ANA Systems 打造高效 CI/CD 模型

在现代软件开发领域,效率和可靠性是企业在竞争中取胜的关键。本文将深入探讨 ANA Systems 如何通过引入业界领先的 CI/CD 平台——CircleCI,克服传统开发流程的瓶颈,实现开发运营效率的全面提升。同时,本文还将详细解析 CircleCI …

RabbitMQ个人理解与基本使用

目录 一. 作用: 二. RabbitMQ的5中队列模式: 1. 简单模式 2. Work模式 3. 发布/订阅模式 4. 路由模式 5. 主题模式 三. 消息持久化: 消息过期时间 ACK应答 四. 同步接收和异步接收: 应用场景 五. 基本使用 &#xff…