🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## PProf 是什么 在 Go 语言中,PProf 是用于可视化和分析性能分析数据的工具,PProf 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。 ## 有哪几种采样方式 * runtime/pprof:采集程序(非 Server)的指定区块的运行数据进行分析。 * net/http/pprof:基于HTTP Server运行,并且可以采集运行时数据进行分析。 * go test:通过运行测试用例,并指定所需标识来进行采集。 ## 可以做什么 * CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置。 * Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏。 * Block Profiling:阻塞分析,记录Goroutine阻塞等待同步(包括定时器通道)的位置,默认不开启,需要调用`runtime.SetBlockProfileRate`进行设置。 * Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况,默认不开启,需要调用`runtime.SetMutexProfileFraction`进行设置。 * Goroutine Profiling:Goroutine 分析,可以对当前应用程序正在运行的 Goroutine 进行堆栈跟踪和分析。 ## 页面展示 ### 常见命令 命令:go tool pprof http://xxxxx:prot/debug/pprof 图形化代码追踪:在交互的命令行输入web就可以了(前提安装:[graphviz](https://graphviz.gitlab.io/_pages/Download/Download_windows.html)) >top N 查看消耗排行 ![](https://img.kancloud.cn/09/73/0973154768fc61604342da2a2b88f10e_779x464.png) ### 图文 ![](https://img.kancloud.cn/04/2d/042d61a0a2bc3c8b47847035aaf628ce_578x495.png) * allocs:查看过去所有内存分配的样本,访问路径为`$HOST/debug/pprof/allocs`。 * block:查看导致阻塞同步的堆栈跟踪,访问路径为`$HOST/debug/pprof/block`。 * cmdline:当前程序的命令行的完整调用路径。 * goroutine:查看当前所有运行的 goroutines 堆栈跟踪,运行的 goroutines 列表,以及调用关系,访问路径为`$HOST/debug/pprof/goroutine`。 * heap:查看活动对象的内存分配情况, 访问路径为`$HOST/debug/pprof/heap`。 * mutex:查看导致互斥锁的竞争持有者的堆栈跟踪,访问路径为`$HOST/debug/pprof/mutex`。 * profile:默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件,访问路径为`$HOST/debug/pprof/profile`。 * threadcreate:查看创建新OS线程的堆栈跟踪,访问路径为`$HOST/debug/pprof/threadcreate`。