Golang pprof 工具使用

本文介绍了Golang的pprof工具,用于监测和分析程序的CPU使用和内存消耗。通过`runtime/pprof`和`net/http/pprof`包,我们可以方便地收集并分析性能数据。示例代码展示了如何开启CPU和内存分析,生成`.prof`文件,并使用`go tool pprof`进行后续分析。重点关注的命令包括`top`、`tree`和`web`,它们帮助开发者识别和优化性能瓶颈。

Golang pprof分析工具使用

1. 概述

gopprof工具可以用来监测进程的运行数据,用于监控程序的性能,对内存使用和CPU使用的情况统信息进行分析。

官方提供了两个包:runtime/pprofnet/http/pprof,前者用于普通代码的性能分析,后者用于web服务器的性能分析

2. runtime/pprof的使用

该包提供了一系列用于调试信息的方法,可以很方便的对堆栈进行调试

  • StartCPUProfile:开始监控cpu。
  • StopCPUProfile:停止监控cpu,使用StartCPUProfile后一定要调用该函数停止监控。
  • WriteHeapProfile:把堆中的内存分配信息写入分析文件中

测试代码

package main

import (
    "flag"
    "runtime/pprof"
    "log"
    "runtime"
    "math/rand"
    "os"
    "time"
)

var cpuprofile = flag.String("cpuprofile", "", "write cpu profile `file`")
var memprofile = flag.String("memprofile", "", "write memory profile to `file`")

const (
    col = 10000
    row = 10000
)

func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal("could not create CPU profile: ", err)
        }
        if err := pprof.StartCPUProfile(f); err != nil {  //监控cpu
            log.Fatal("could not start CPU profile: ", err)
        }
        defer pprof.StopCPUProfile()
    }

    // 主逻辑区,进行一些简单的代码运算
    x := [row][col]int{}
    s := rand.New(rand.NewSource(time.Now().UnixNano()))

    for i := 0; i < row; i++{
        for j := 0; j < col; j++ {
            x[i][j] = s.Intn(100000)
        }
    }


    for i := 0; i < row; i++{
        tmp := 0
        for j := 0; j < col; j++ {
            tmp += x[i][j]
        }
    }


    if *memprofile != "" {
        f, err := os.Create(*memprofile)
        if err != nil {
            log.Fatal("could not create memory profile: ", err)
        }
        runtime.GC() // GC,获取最新的数据信息
        if err := pprof.WriteHeapProfile(f); err != nil {  // 写入内存信息
            log.Fatal("could not write memory profile: ", err)
        }
        f.Close()
    }
}
go build
./pprof -cpuprofile cpu.prof -memprofile mem.prof // 会产生cpu分析文件和内存分析文件

然后本地运行go tool pprof cpu.prof就可以进入命令行,使用性能分析工具查看数据

  • top:命令格式:top [n],查看排名前n个数据,默认为10
  • tree:命令格式:tree [n],以树状图形式显示,默认显示10个
  • web:以web形式查看,在web服务的时候经常被用到,需要安装gv工具(macos brew install graphviz)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值