HiBlock区块链社区区块链入门

Go学习之路-代码性能监控pprof

2019-05-06  本文已影响67人  天之皓月

本篇文章只是对Go语言中代码性能监控(pprof)简单使用的介绍,希望对您们的学习道路上有所帮助,相互学习,共同帮助

注意:本文在Mac Pro下操作为例,基于Go1.12版本

在软件开发的过程中,项目的上线并不是重点。上线之后,还需对程序进行取样分析运行情况,并重构现有的功能,让程序执行的更高效更稳定。

一:pprof基础介绍

1.1 pprof是什么?

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

profile.proto 是一个 Protocol Buffer v3 的描述文件,它描述了一组 callstack 和 symbolization 信息, 作用是表示统计分析的一组采样的调用栈,是很常见的 stacktrace 配置文件格式

1.2 支持什么使用模式

1.3 可以用来干嘛

1.4 在go中pprof可以干嘛

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

官方提供包及文档:
包:

二: 通过简单的例子来进行描述

package main

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

func main() {
    // 开启pprof
    go func() {
        log.Println(http.ListenAndServe("localhost:8087", nil))
    }()
    go hello()
    select {}
}
func hello() {
    for {
        go func() {
            fmt.Println("hello word")
        }()
        time.Sleep(time.Millisecond * 1)
    }
}

运行这个文件
效果截图


效果截图

分析

2.1通过Web服务器监测

当服务开启成功时(别忘记引入监测包),查看当前信息 ,地址栏中输入http://localhost:8087/debug/pprof/

效果图

2.2 通过交互式终端进行使用

2.2.1
命令:go tool pprof http://localhost:8087/debug/pprof/profile\?seconds\=30

执行该命令后,需等待 30 秒(可调整 seconds 的值),pprof 会进行 CPU Profiling。结束后将默认进入 pprof 的交互式命令模式,可以对分析的结果进行查看或导出。具体可执行 pprof help 命令说明

效果图
help命令

top
命令格式: top[n],查看排名前n个数据,默认为10

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

其中最后一列为函数名称,在大多数的情况下,我们可以通过这五列得出一个应用程序的运行情况,加以优化😊
tree
命令格式:tree[n],以树状图形显示

tree命令
2.2.2
命令:go tool pprof http://localhost:8087/debug/pprof/heap
效果图
-inuse_space:分析应用程序的常驻内存占用情况
-alloc_objects:分析应用程序的内存临时分配情况

2.3 可视化界面

测试用例可以参照这个
需安装graphviz(谷歌或者百度)
Mac中安装的话
命令:brew install graphviz
启动可视化界面
第一种:go tool pprof -http=:8089 cpu.prof
第二种

$ go tool pprof cpu.prof
$ (pprof) web

若是出现Could not execute dot; may need to install graphviz.,那么需要安装graphviz

查看pprof可视化界面


界面截图
top source peek

小结:本篇文章也是自己根据文档已经别人的文章(站在巨人的肩膀上)进行学习的,目前理解的不是很深,文章中有遗漏的地方,欢迎提出,相互学习,共同进步

三:相关链接

Golang 大杀器之性能剖析
Go pprof的使用

google-pprof

上一篇 下一篇

猜你喜欢

热点阅读