Go基础之性能分析PProf

本文介绍了Go语言中的性能分析工具pprof,包括CPU、内存、阻塞和互斥锁分析,提供了Web界面、交互式终端和可视化界面的使用示例,帮助开发者定位和优化性能瓶颈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 简介

pprof 是用于可视化和分析性能分析数据的工具。pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。
profile.proto 是一个 Protocol Buffer v3 的描述文件,它描述了一组 callstack 和 symbolization 信息, 作用是表示统计分析的一组采样的调用栈,是很常见的 stacktrace 配置文件格式

支持什么使用模式

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

可以做什么

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

2. 示例

使用pprof必须暴露端口。

package main

import (
    "log"
    "net/http"
    _ "net/http/pprof"
)

func main() {
    go func() {
        for {
            log.Println("test pprof")
        }
    }()

    http.ListenAndServe("0.0.0.0:6060", nil)
}

** Web 界面**
查看当前总览:访问 http://127.0.0.1:6060/debug/pprof/
在这里插入图片描述
这个页面中有许多子页面,咱们继续深究下去,看看可以得到什么?

cpu(CPU Profiling): debug/pprof/profile,默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件
block(Block Profiling):debug/pprof/block,查看导致阻塞同步的堆栈跟踪
goroutine:debug/pprof/goroutine,查看当前所有运行的 goroutines 堆栈跟踪
heap(Memory Profiling): debug/pprof/heap,查看活动对象的内存分配情况
mutex(Mutex Profiling):debug/pprof/mutex,查看导致互斥锁的竞争持有者的堆栈跟踪
threadcreate:debug/pprof/threadcreate,查看创建新OS线程的堆栈跟踪

交互式终端
(1)go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60
执行该命令后,需等待 60 秒(可调整 seconds 的值),pprof 会进行 CPU Profiling。结束后将默认进入 pprof 的交互式命令模式,可以对分析的结果进行查看或导出。具体可执行 pprof help 查看命令说明
在这里插入图片描述

flat:给定函数上运行耗时
flat%:同上的 CPU 运行耗时总比例
sum%:给定函数累积使用 CPU 总比例
cum:当前函数加上它之上的调用运行总耗时
cum%:同上的 CPU 运行耗时总比例

(2)go tool pprof http://localhost:6060/debug/pprof/heap

-inuse_space:分析应用程序的常驻内存占用情况
-alloc_objects:分析应用程序的内存临时分配情况

(3) go tool pprof http://localhost:6060/debug/pprof/block

(4) go tool pprof http://localhost:6060/debug/pprof/mutex

可视化界面
启动方式:
如果出现 Could not execute dot; may need to install graphviz.,就是提示你要安装 graphviz 了 (请右拐谷歌)

$ go tool pprof -http=:8080 cpu.prof
#或者
$ go tool pprof cpu.prof 
$ (pprof) web

在这里插入图片描述
在这里插入图片描述
框越大,线越粗代表它占用的时间越大。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值