• 【golang】pprof性能调优工具的具体使用(带案例)


    前言

    最近去博客园写文章了,好久没有更新博客了,搬运下我在博客园写的文章~

    正文

    大晚上的,老是刷到有关pprof的文章,忍不住看了几篇文章…写个学习笔记记录下~
    这是图
    1.pprof是什么?

    pprof是go内置的性能调优工具,可以借助一些工具以图形化的方式展示出来某些接口占用cpu资源的详情。
      
    2.专项用途:

    1.cpu

    主要测试占用cpu资源比较多的函数或者数据,可以推出当前程序的热点数据

    2.内存

    主要测试堆内存的使用以及分配情况

    3.阻塞

    主要测试goroutine的使用情况,分析系统的并发瓶颈

    3.使用方式

    1.命令行

    这个不介绍了,后面都要使用命令行.先看个例子

    func readMemStats() {
        // MemStats 描述内存信息的静态变量
        var ms runtime.MemStats
        // 读取某一时刻内存情况的快照
        runtime.ReadMemStats(&ms)
        // alloc占用内存情况、堆空闲情况、堆释放情况
        log.Printf("========> Alloc:%d(bytes) HeapIdle:%d(bytes) HeapReleased:%d(bytes)", ms.Alloc, ms.HeapIdle, ms.HeapReleased)
    }
    
    // append的扩容情况
    func test() {
        container := make([]int, 8)
        log.Println("========> loop begin .")
        // 追加元素
        for i := 0; i < 32*1000*1000; i++ {
            container = append(container, i)
            if i == 16*1000*1000 {
                readMemStats()
            }
        }
        log.Println("==========> loop end.")
    }
    func main() {
    
    
        log.Println("============> [start].")
    // 开始时候的内存占用情况
        readMemStats()
    // 调用append时候的情况
        test()
        readMemStats()
        log.Println("============> [force.gc].")
        // 强制开启gc
        runtime.GC()
        log.Println("===========>[Done] .")
        readMemStats()
        go func() {
            for {
                readMemStats()
                time.Sleep(10 * time.Second)
            }
        }()
        time.Sleep(3600 * time.Second)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    看下具体情况:
     在这里插入图片描述
    上面显示的参数中可以看到内存的使用情况。分别是分配、空闲、释放

    我们可以也可以通过访问相应的地址,在界面上看到相应的信息,来看下一种方式:

    2.网络方式

    只需要在上面代码加入监听语句,并导入 net/http/pprof库即可。下面是仅仅展示了main函数部分

    	import (
        "log"
        "net/http"
        _ "net/http/pprof"
        "runtime"
        "time"
    )
    
    func main() {
        // 启动 pprof,这种是采用网络监听的方式,可以通过访问界面显示出测试的数据
        go func() {
            log.Println(http.ListenAndServe("localhost:8080", nil))
        }()
        log.Println("============> [start].")
        readMemStats()
        test()
        readMemStats()
        log.Println("============> [force.gc].")
        // 强制开启gc
        runtime.GC()
        log.Println("===========>[Done] .")
        readMemStats()
        go func() {
            for {
                readMemStats()
                time.Sleep(10 * time.Second)
            }
        }()
        time.Sleep(3600 * time.Second)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    下面让我们来执行下:

    运行程序后,访问上面路径的时候可以加上 /debug/pprof。这个是pprof默认的网页地址,当然不止这一个,其他的大家可以查询下,我就不过多介绍了~
      在这里插入图片描述
    我们可以在下面看到各个文件的解释,圈起来的是有关cpu性能分析的文件。我们可以点击下载下。

    3.交互式

    1.首先我们把刚才下载的cpu相关的文件,移动到当前目录下

    2.然后执行:
    这是图

    芜湖~起飞.这个时候我们已经进入交互模式,输入 top 查看当前程序的执行情况:
    这是图
    涉及的参数的意思,大家可以私下去查询下~

    如果想要以图形化的方式展示呢,输入web:

    在这里插入图片描述

    可以看到相关的分析图,方框越大,占用cpu资源越多哟~

    如果输入web,显示没有svg的话,可以下载 graphviz。配置好环境变量后,重启电脑,再次输入web即可

    好了,关于pprof的简单使用就到这里喽,对了上面的程序参考的是这里 : 点这里

    下次再见~

    |不骄不躁,保持学习

  • 相关阅读:
    【MM小贴士】从 purchase 到 payment 全流程演示
    【现代密码学原理实验】——CrypTool2与OpenSSL的使用(学习笔记)
    考研数学一二三 2010-2019年每道题的难度系数
    MySQL流程控制函数
    【精讲】vue框架 vue组件中的ref、props传值并修改、混合(子组件重复部分利用混合可以减少代码量的重复编写)
    ASUS华硕冰刃7笔记本GX650PY原装Windows11工厂安装包 恢复出厂开箱状态预装OEM系统 带MyASUS in WinRE重置功能
    mysql备份数据库linux
    《深入浅出Spring》父子容器
    Javaweb之javascript的详细解析
    CCF走进高校
  • 原文地址:https://blog.csdn.net/m0_46251547/article/details/126242661