631 字
3 分钟
pprof 使用
pprof
是一个用于可视化和分析性能数据的工具,常用于分析Go语言程序的性能,包括CPU使用情况和内存占用。
导入
pprof
包:在Go程序中导入pprof
包。import _ "net/http/pprof"
启动HTTP服务器:
pprof
通过HTTP服务器提供分析界面,需要在程序中启动HTTP服务器。go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }()
如果使用了 Echo 等框架,需要如下配置:
package main import ( "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" _ "net/http/pprof" "net/http" ) func main() { e := echo.New() e.GET("/debug/pprof/*", echo.WrapHandler(http.DefaultServeMux)) e.Logger.Fatal(e.Start(":1327")) }
运行程序:编译并运行你的Go程序。
收集内存分析数据:在程序运行时,使用
pprof
工具收集内存分析数据。可以通过访问http://localhost:6060/debug/pprof/heap
获取堆内存的实时数据。生成分析报告:使用
go tool pprof
命令获取和分析内存数据。例如:go tool pprof http://localhost:6060/debug/pprof/heap
浏览和分析报告:
pprof
提供了文本和图形两种方式查看分析数据。例如,使用top
命令查看内存使用最多的函数,或使用web
命令生成内存分析的图形报告。top
命令:- 用途:显示消耗最多内存的函数。
- 示例:在
pprof
的交互式界面中输入top
,可以看到内存占用最多的几个函数。
list
命令:- 用途:显示指定函数的详细内存分配信息。
- 示例:
list 函数名
,这会显示该函数中的内存分配详情。
web
命令:- 用途:生成一个SVG格式的堆内存分配的调用图,可以直观地看到各个函数之间的调用关系和内存分配情况。
- 示例:输入
web
,pprof
会自动打开浏览器展示内存分配的图形化视图。
tree
命令:- 用途:以树状图的形式展示内存分配情况。
- 示例:输入
tree
,可以看到以树形结构组织的内存分配信息。
peek
命令:- 用途:查看特定函数或路径的内存分配情况。
- 示例:
peek 函数名
,可以看到该函数的内存分配情况及其调用者的信息。
图形化界面:
- 使用
pprof -http=:端口号
命令启动pprof
的图形界面。 - 示例:
go tool pprof -http=:8080 http://localhost:6060/debug/pprof/heap
,然后在浏览器中访问http://localhost:8080
。
- 使用
这些命令可以帮助你更深入地理解程序的内存使用情况,从而对程序进行有效的优化。不同的命令适用于不同的分析需求,可以根据实际情况灵活选择。