golang之性能分析工具pprof
PProf 是一个 Go 程序性能分析工具,可以分析 CPU、内存等性能。Go 在语言层面上集成了 profile 采样工具,只需在代码中简单地引入 runtime/ppro 或者 net/http/pprof 包即可获取程序的 profile 文件,并通过该文件来进行性能分析。
第一种: 共用一套web服务
在 gin 中使用 pprof 功能,需要用到 github.com/gin-contrib/pprof middleware,使用时只需要调用 pprof.Register() 函数即可
go get github.com/gin-contrib/pprof
使用:
package router import (
"github.com/gin-contrib/pprof"
....
) // Load loads the middlewares, routes, handlers.
func Load(g *gin.Engine, mw ...gin.HandlerFunc) *gin.Engine {
// pprof router
pprof.Register(g)
....
}
更多使用方式: github.com/gin-contrib/pprof
第二种:新开一个接口
a)引入pprof包
_ "net/http/pprof"
b)监听新端口
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()
分析命令:
go tool pprof http://127.0.0.1:8080/debug/pprof/pro
- allocs:查看过去所有内存分配的样本,访问路径为 $HOST/debug/pprof/allocs
- block:查看导致阻塞同步的堆栈跟踪,访问路径为 $HOST/debug/pprof/block
- cmdline: 当前程序的命令行的完整调用路径。
- goroutine:查看当前所有运行的 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
获取profile采集信息
go tool pprof http://127.0.0.1:8080/debug/pprof/profile
也可以通过浏览器访问该地址来获取当前服务状态, 包含CPU和内存情况
性能分析:
基于以上获取到的程序的profile信息,并且进入到的pprof交互界面,就可以在界面上执行topN获取采集信息

通过topN的输出可以分析出那些函数占用的CPU时间片最多,那些函数可能存在性能问题.
通过上面的输出结果,可以很清晰地看到消耗最多 CPU 资源的 10 个调用方法。
这里需要注意的是第三列的 sum% 的字段,表示的是前 N 行的 flat% 列的数值总和
参数说明:
- flat: 表示函数自身的 CPU 使用时间,单位为纳秒
- flat%:表示函数自身的 CPU 使用时间占总时间的百分比
- sum%: 表示函数及其内部调用的其他函数的 CPU 使用时间占总时间的百分比
- cum: 表示函数及其内部调用的其他函数的 CPU 使用时间之和,单位为纳秒
- cum%: 表示函数及其内部调用的其他函数的 CPU 使用时间之和占总时间的百分比
flat 和 cum 的区别在于: flat 只统计函数自身的 CPU 使用时间,不包括调用其他函数的时间,而 cum 则包括了函数自身的时间和调用其他函数的时间。
还可以使用svg来生成svg文件
前提需要下载并安装Graphviz: https://graphviz.org/
重新分析文件:
go tool pprof .\pprof.___3boss_api.exe.samples.cpu.001.pb.gz
在交互界面键入: svg 则会生成svg文件,点击打开即可

在交互式页面中,还有更多命令的支持, help查看
# 查看CPU消耗的前几位
topN # 生成svg文件
svg # 在浏览器中打开
web
常见问题:
1.在gin框架中使用pprof分析报,执行采样命令后报:profile duration exceeds server's WriteTimeout
解决: 这是执行go tool pprof http://x.x.x.x:8000/debug/pprof/profile之后,会等待30s中,进行采样操作, 如果超过了框架设置的WriteTimeout时间的话,就会报这个错误, 可以调整该属性
更多使用:
golang之性能分析工具pprof的更多相关文章
- golang 性能调优分析工具 pprof(下)
golang 性能调优分析工具 pprof(上)篇, 这是下篇. 四.net/http/pprof 4.1 代码例子 1 go version go1.13.9 把上面的程序例子稍微改动下,命名为 d ...
- 排查golang的性能问题 go pprof 实践
小结: 1.内存消耗分析 list peek 定位到函数 https://mp.weixin.qq.com/s/_LovnIqJYAuDpTm2QmUgrA 使用pprof和go-torch排查 ...
- 即时性能分析工具 Pyroscope
当网站上线后,流量增加或短暂功能故障,都会造成使用者体验相当不好,而这时该怎么快速找到性能的瓶颈呢?通常 CPU 达到 100% 时,有时候也很难复制及找出关键问题点. 本篇文章,我们会介绍一套工具叫 ...
- Java 性能分析工具 , 第 3 部分: Java Mission Control
引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...
- Java 性能分析工具 , 第 2 部分:Java 内置监控工具
引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...
- Java 性能分析工具 , 第 1 部分: 操作系统工具
引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
- 性能分析工具-PerfView
Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Per ...
- 11个Visual Studio代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
- Linux性能分析工具的安装和使用
转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...
随机推荐
- C++: 智能指针的自定义删除器 `Custom Deleter` 有什么用?
C++11智能指针std::shared_ptr和std::unique_ptr都支持自定义删除器,本文将介绍自定义删除器的使用场景和使用方法.智能指针模板参数的第二个类型是删除器,一般是一个函数指针 ...
- Goby漏洞发布 | 0day NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞【已验证】
漏洞名称:NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞 English Name:NACOS /nacos/v1/cs/ops/data/removal ...
- JAVA开发常见问题整理(持续更新)
maven项目出现:"致命错误: 在类路径或引导类路径中找不到程序包 java.lang"的解决方法 原文地址:https://www.cnblogs.com/xuehuashan ...
- 全面升级,票据识别新纪元:合合信息TextIn多票识别2.0
票据识别 - 自动化业务的守门员 发票.票据识别,是OCR技术和RPA.CMS系统结合的一个典型场景,从覆盖率.覆盖面的角度来说,应该也是结合得最成功的场景之一. 旧瓶装新酒,已经成熟的产品何苦费 ...
- RxJS 系列 – Custom Operator
前言 虽然 RxJS 提供了非常多的 Operators. 但依然会有不够用的时候. 这时就可以自定义 Operator 了. Operator Is Just a Function Observab ...
- SpringMVC——SSM整合——项目异常处理
项目异常处理 项目异常分类 业务异常 不规范的用户行为产生的异常 规范的用户行为产生的异常 系统异常 项目运行过程中可预计且无法避免的异常 其他异常 编程人员未预期到的异常 项 ...
- 技术储备--SPI接口硬件协议栈芯片W5500使用
整体思路: 移植官方软件包代码, 配置好底层的SPI收发函数以及片选脚操作, 至于临界区操作函数,根据实际情况进行添加,也可以不加. 这就移植好了,就可以在我们自己的板子上跑官方的示例程序了. 官方软 ...
- 【VMware VCF】使用 SFTP 服务器备份 VCF 核心组件的配置文件。
可以定期对 VMware Cloud Foundation 环境中的相关核心组件(如 SDDC Manager.NSX Manager 以及 vCenter Server 等)创建配置备份,以防止当意 ...
- 手写 p-map(控制并发数以及迭代处理 promise 的库)
介绍 p-map 是一个迭代处理 promise 并且能控制 promise 执行并发数的库.作者是 sindresorhus,他还创建了许多关于 promise 的库 promise-fun,感兴趣 ...
- KSM的使用
使能KSM KSM只会处理通过madvise系统调用显式指定的用户进程地址空间,因此用户程序想使用这个功能就必须在分配地址空间时显式地调用madvise(addr,length,MADV_MERGEA ...