golang内存及GC分析简易方法

通过 net/http/pprof 工具来进行分析内存

pprof简介

pprof 是用于可视化和分析性能分析数据的工具; 以profile.proto读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。

支持模式

  • Report generation:报告生成
  • Interactive terminal use:交互式终端使用
  • Web interface:Web 界面

用途

  • CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
  • Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
  • Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置
    Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况;

使用示例

引入pprof

net/http/pprofruntime/pprof 进行了封装,并在http端口上暴露出来,入口为 IP:PORT/debug/pprof/;
若应用为web服务器,只需引入包即可_ "net/http/pprof",会自动注册路由到/debug/pprof/;
若为服务时程,可开启一个goroutine开启端口并监听;

package main

import (
	"github.com/astaxie/beego"
	_ "github.com/beeWeb/routers"
	"net/http"
	_ "net/http/pprof"
)

func main() {
	go func() {
		http.ListenAndServe("0.0.0.0:8090", nil)
	}()
	beego.Run()
}

数据分析

访问 http://127.0.0.1:8090/debug/pprof/ 即可实时查看性能数据;
在这里插入图片描述
常用的采集分析命令:

go tool pprof http://localhost:8080/debug/pprof/profile?seconds=30  默认采集需要30go tool pprof http://localhost:8080/debug/pprof/heap
    -inuse_space:分析应用程序的常驻内存占用情况
    -alloc_objects:分析应用程序的内存临时分配情况
go tool pprof http://localhost:8080/debug/pprof/block
go tool pprof http://localhost:8080/debug/pprof/mutex

命令执行后,在本地会保留一份分析报告,如pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz,可以通过go tool pprof来进行分析;
通过web可视化的方式可以分析数据:

go tool pprof -http=:8000 http://localhost:8080/debug/pprof/heap    查看内存使用
go tool pprof -http=:8000 http://localhost:8080/debug/pprof/profile 查看cpu占用
go tool pprof -http=:8000 pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz  对本地生成文件的解析查看

注意,需要提前安装 Graphviz 用于画图:
下载地址:https://graphviz.gitlab.io/download/
windows:https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.zip
解压后,添加环境变量 Path下添加 %graphviz%\bin;
测试:命令提示符下 dot -V # 打印版本信息
若是Linux,yum install graphviz # 默认安装版本为为2.30 依赖项较多;

访问 http://localhost:8000/ui, 即可看到详细的分析报告及各种图示;
eg:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GC

windows

在cmd命令行下:
1.设置跟踪GC的临时环境变量

set GOGCTRACE=1
set GODEBUG=gctrace=1

2.将gc写入日志中

 xxx.exe 2> gc.log

Linux

GODEBUG=gctrace=1 ./xxx
GODEBUG=gctrace=1 ./xxx 2> gc.log

参数说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值