Gin 应用并注册 pprof

pprof` 配置与使用步骤

1. 引言

通过下面操作,你可以顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。你可以查看 CPU

使用情况、内存占用、以及其他运行时性能数据,并通过图形化界面进行深度分析。

1. 安装依赖

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

bash 复制代码
go get github.com/gin-contrib/pprof
2. 创建 Gin 应用并注册 pprof

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

go 复制代码
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 服务
	go func() {
		if err := r.Run(":8080"); err != nil {
			log.Fatal(err)
		}
	}()

	// 模拟应用运行,持续提供服务
	time.Sleep(10 * time.Second)
}
3. 收集 pprof 数据
  • 在程序运行时,访问以下 URL 来收集不同类型的性能数据:
    • CPU 性能数据 :http://localhost:8080/debug/pprof/profile?seconds=30 (收集 30 秒的 CPU 使用情况)
    • 堆内存数据 :http://localhost:8080/debug/pprof/heap
    • 线程数据 :http://localhost:8080/debug/pprof/goroutine
    • 控制反转数据 :http://localhost:8080/debug/pprof/block
    • 堆栈数据 :http://localhost:8080/debug/pprof/threadcreate
4. 生成 pprof 文件

为了方便分析,你可以通过以下代码生成 .pprof 文件:

go 复制代码
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() 时间来让程序有足够的时间收集样本。

5. 使用 go tool pprof 分析 pprof 文件

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

Download Graphviz

接着,使用 go tool pprof 来分析 cpu.pprof 文件。运行以下命令:

go 复制代码
go tool pprof -http=:80 cpu.pprof

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

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

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

  • CPU 性能图 :http://localhost/ui/。
  • 生成的图表 :你可以通过 Web UI 或者 go tool pprof 的 web 命令来生成 png、svg 等格式的图表。

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

相关推荐
行者-全栈开发5 天前
InfluxDB TSM 存储引擎深度解析:写入路径与压缩机制
cache·性能调优·influxdb·wal·存储引擎·compaction·tsm
ly76898 天前
PostgreSQL JSONB 在 Spring Boot 中的读写边界:从 JDBC 类型映射到 GIN 索引失效
spring boot·postgresql·gin·jsonb·pgjdbc·gin 索引
gwf2168 天前
内核态RDMA驱动调试技巧:ftrace/tracepoint/crash分析 —— 深入驱动底层的排错艺术
性能调优·linux驱动·ftrace·rdma·tracepoint·内核调试·crash分析
gwf2169 天前
常见驱动问题定位与解决:设备识别、性能不达预期、CQ错误码 —— 资深RDMA驱动调试排错指南
驱动开发·linux内核·性能调优·rdma·故障排查·mlx5·irdma
谢亮_vipxieliang11 天前
Go Gin 中间件与参数验证:从入门到实战
中间件·golang·gin
gwf21612 天前
SSD I/O路径全栈优化与Linux内核存储栈性能调优实战
性能优化·linux内核·nvme·性能调优·固态硬盘·存储技术·io_uring
桦仔13 天前
自动数据库索引压缩合并
性能调优·聚集索引
做个文艺程序员14 天前
MinIO第06篇:分布式集群部署、纠删码调优与生产级性能优化
性能调优·minio·高可用·安全漏洞·分布式部署·纠删码
ly768914 天前
Redis 内存优化与性能调优:编码转换、内存碎片与慢查询的定位链路
redis·性能调优·内存优化·慢查询·编码转换
gwf21616 天前
QP状态机详解:Reset→Init→RTR→RTS与建链握手过程
性能调优·rdma·qp状态机·linux内核驱动·ib_modify_qp·cm建链·irdma