"pprofport",8080)varerr erroraddr:=":"+strconv.Itoa(pPort)gofunc(){err=http.ListenAndServe(addr,nil)iferr!=nil{logger.Error("funcRetErr=http.ListenAndServe||err=%s",err.Error())}}()returnerr} pprof包会自动注册 hand
这样的话,访问http://localhost:8080/debug/ppprof/也是有用的 开源框架 在不同的开源框架中,有提供自己封装好的pprof包,调用更加方便,具体使用请参考框架文档 pprof主要核心就是将pprof路由注册到服务中,并可以访问此服务即可 数据分析 数据分析通过命令 go tool pprof 进行,主要有2种查看模式 1:通过http路径进入...
go tool pprof profile文件名, 此时会进入一个交互式控制台,输入命令 web会产生一个svg文件,程序回启动浏览器自动打开这个文件,即可进入可视化界面。我们也可以在上面CPU分析中的控制台中以同样的方式进入可视化界面。 go tool pprof -http=:8080 profile文件名 ,此时浏览器会默认打开localhost:8080访问 ,建议使用这种...
这是一个很简单的例子,运行go run main.go在当前目录下生成一个cpu.pprof文件。然后输入命令go tool pprof cpu.pprof进入pprof的命令行中。 PS D:\project\teach-study\golang\base\pprof\cpu> go run main.go PS D:\project\teach-study\golang\base\pprof\cpu> go tool pprof cpu.pprof File: main.ex...
第一个路径 /debug/pprof/ 下面其实还有 5 个子路径: goroutine threadcreate heap block mutex grpc服务如何使用pprof 在gRPC服务启动时,异步启动一个监听其他端口的HTTP服务,通过这个HTTP服务间接获取gRPC服务的分析数据。 分析数据(使用Profile文件) 方法一:用go tool pprof交互模式分析(推荐) ...
当然想要通过pprof分析程序性能,也是要引入一丢丢代码吧,毕竟采集程序运行时数据,是需要耗费一些资源的。引入pprof采样也非常简单,几行代码就能搞定: package main import ( "net/http" _ "net/http/pprof" ) func main() { go func() {
pprof可以支持多种类型的采样分析. 可以分析cpu或者内存或者goroutine等 集成很简单, 在工程中引入如下代码: import _ "net/http/pprof" go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }() 注: runtime/pprof: 手动调用start/stop api进行采集,可定制化分析; ...
1、起因一个Gin项目,最近经常出现CPU爆表,内存占用很高的情况;于是对其进行优化分析 2、配置正常情况下在 main.go 中导入 "net/http/pprof" 就可以但是由于是用的gin框架直接引入路由会被覆盖掉;需要…
Pprof的局限性 作为Go 研发有时会遇到内存泄露的情况,大部分人第一时间会尝试打一个 heap profile 看问题原因。但很多时候,heap profile 火焰图对问题排查起不到什么帮助,因为它只记录了对象是在哪创建的。在一些复杂业务场景下,对象经过多层依赖传递或者内存池复用,几乎已经无法根据创建的堆栈信息定位根因。
go tool pprof http://127.0.0.1:8001/debug/pprof/heap # 下载 cpu profile,默认从当前开始收集 30s 的 cpu 使用情况,需要等待 30s go tool pprof http://127.0.0.1:8001/debug/pprof/profile # wait 120s go tool pprof http://127.0.0.1:8001/debug/pprof/profile?seconds=120 ...