首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Gin应用并注册pprof分析goroutine问题

Gin应用并注册pprof分析goroutine问题

作者头像
BUG弄潮儿
发布2025-06-23 14:01:07
发布2025-06-23 14:01:07
7100
代码可运行
举报
文章被收录于专栏:JAVA乐园JAVA乐园
运行总次数:0
代码可运行

最近使用go内置的http client 调用第三方的接口时,在Prometheus监控中发现goroutine数据非常高。在排查这个问题时,发现一个非常好用的工具。不过使用本文排查问题时,前提条件项目使用的是gin框架开发的web项目。

通过下面操作,可以就顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。可以查看 CPU 使用情况、内存占用、以及其他运行时性能数据,并通过图形化界面进行深度分析。

安装依赖

首先,确保安装了github.com/gin-contrib/pprof包,以便在 Gin 应用中启用 pprof 路由。

代码语言:javascript
代码运行次数:0
运行
复制
go get github.com/gin-contrib/pprof

创建 Gin 应用并注册 pprof

在Gin 应用项目中,注册 pprof 路由,确保程序可以提供性能分析数据。

代码语言:javascript
代码运行次数:0
运行
复制
package main

import (
 "github.com/gin-contrib/pprof"
 "github.com/gin-gonic/gin"
 "log"
 "net/http"
 "time"
)

func main() {
 // 创建 Gin 路由
 r := gin.Default()

 // 注册 pprof 路由
 pprof.Register(r)

 // 定义其他路由
 r.GET("/hello", func(c *gin.Context) {
  c.JSON(http.StatusOK, gin.H{
   "message": "hello world",
  })
 })

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

收集 pprof 数据

在程序运行时,访问以下 URL 来收集不同类型的性能数据:

CPU 性能数据

收集 30 秒的 CPU 使用情况

代码语言:javascript
代码运行次数:0
运行
复制
http://localhost:8080/debug/pprof/profile?seconds=30

堆内存数据

代码语言:javascript
代码运行次数:0
运行
复制
http://localhost:8080/debug/pprof/heap

线程数据

代码语言:javascript
代码运行次数:0
运行
复制
http://localhost:8080/debug/pprof/goroutine

控制反转数据

代码语言:javascript
代码运行次数:0
运行
复制
http://localhost:8080/debug/pprof/block

堆栈数据

代码语言:javascript
代码运行次数:0
运行
复制
http://localhost:8080/debug/pprof/threadcreate

生成 pprof 文件

代码语言:javascript
代码运行次数:0
运行
复制
package main

import (
 "log"
 "os"
 "runtime/pprof"
 "time"
)

func main() {
 // 创建并打开 cpu.pprof 文件
 f, err := os.Create("cpu.pprof")
 if err != nil {
  log.Fatal(err)
 }
 defer f.Close()

 // 开始 CPU 性能分析
 pprof.StartCPUProfile(f)
 defer pprof.StopCPUProfile()

 // 模拟一些负载,以便有足够的计算样本
 time.Sleep(5 * time.Second) // 让程序运行 5 秒,收集数据
}

这个代码段将会在程序执行时生成 cpu.pprof 文件。你可以调整 time.Sleep() 时间来让程序有足够的时间收集样本。

使用 go tool pprof 分析 pprof 文件

下载并安装 Graphviz,它用于生成可视化图表

代码语言:javascript
代码运行次数:0
运行
复制
https://graphviz.org/download/

这将启动一个 Web 服务器,可以通过访问http://localhost/ui/ 来查看 CPU 性能分析的图形界面。

总结

正确的操作顺序

  • 首先运行Gin应用程序,确保它已经启动并在监听端口上运行(例如localhost:8080)。
  • 然后使用go tool pprof或通过浏览器访问 http://localhost:8080/debug/pprof/ 来收集性能数据。
  • go tool pprof中分析生成的.pprof文件,或者通过 Web 界面查看性能数据。

Web 界面访问和分析

如果使用了go tool pprof -http=:80命令启动 Web 界面,可以通过浏览器访问以下地址来查看分析结果:

代码语言:javascript
代码运行次数:0
运行
复制
http://localhost/ui/

CPU性能图:http://localhost/ui/

生成的图表:可以通过Web UI或者go tool pprof 的 web 命令来生成 png、svg 等格式的图表。

通过这种方式,可以查看函数调用关系、函数的CPU占用情况、内存使用等信息,从而更有针对性地进行性能优化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装依赖
  • 创建 Gin 应用并注册 pprof
  • 收集 pprof 数据
    • CPU 性能数据
    • 堆内存数据
    • 线程数据
    • 控制反转数据
    • 堆栈数据
  • 生成 pprof 文件
  • 总结
  • Web 界面访问和分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档