Go pprof性能分析
pprof
是Go语言内置的性能分析工具,它可以帮助我们分析程序的CPU使用情况、内存分配等。
pprof
包含两部分:
-
Go语言内置的两个包
-
net/http/pprof
对
runtime/pprof
的二次封装,一般是服务型应用。比如 web server ,它一直运行。这个包对提供的 http 服务进行数据采集分析。 -
runtime/pprof
采集程序运行数据进行性能分析,一般用于后台工具型应用,这种应用运行一段时间就结束。
-
-
性能剖析工具
go tool pprof
性能分析指标
- CPU性能分析
- 内存(Memory)性能分析
- 阻塞(block)性能分析
- 锁(mutex)性能分析
内置包应用
runtime/pprof
cpu分析
关键
// 开启 cpu 采集分析:
pprof.StartCPUProfile(w io.Writer)// 停止 cpu 采集分析:
pprof.StopCPUProfile()
demo
package mainimport ("log""os""runtime/pprof"
)func main() {f, err := os.OpenFile("cpu.pprof", os.O_CREATE|os.O_RDWR, 0644)if err != nil {log.Fatalf("Failed to open profile file: %v", err)return}if err = pprof.StartCPUProfile(f); err != nil {log.Fatalf("Failed to start CPU profiling: %v", err)return}defer pprof.StopCPUProfile()// do something
}
内存分析
关键
pprof.WriteHeapProfile(w io.Writer)
demo
func captureHeapProfile(filename string) error {// 打开文件,用于存储堆内存信息file, err := os.Create(filename)if err != nil {return err}defer file.Close()// 写入堆内存信息if err = pprof.WriteHeapProfile(file); err != nil {return err}return nil
}
net/http/pprof
对于服务类型的应用,主要在服务内部匿名引入net/http/pprof
包,然后通过HTTP
访问pprof
页面。
匿名引入方式为:import _ "net/http/pprof"
package mainimport ("fmt""net/http"_ "net/http/pprof"
)func main() {http.HandleFunc("/", hello)err := http.ListenAndServe(":8080", nil)if err != nil {fmt.Println("ListenAndServe Err:", err.Error())return}
}func hello(resp http.ResponseWriter, req *http.Request) {fmt.Fprintln(resp, "Hello World, Are You OK?")
}
浏览器打开 http://localhost:8080/debug/pprof/
如果HTTP服务不是通过http.ListenAndServe(":8080", nil)
启动的,需要自己注册pprof
路由
net/http/pprof
包中,有init
函数
func init() {http.HandleFunc("/debug/pprof/", Index)http.HandleFunc("/debug/pprof/cmdline", Cmdline)http.HandleFunc("/debug/pprof/profile", Profile)http.HandleFunc("/debug/pprof/symbol", Symbol)http.HandleFunc("/debug/pprof/trace", Trace)
}
如果使用自定义的ServeMux
,则需要增加注册后,才能获取到pprof
// 自己注册这几个函数
r.HandleFunc("/debug/pprof/", pprof.Index)
r.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
r.HandleFunc("/debug/pprof/profile", pprof.Profile)
r.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
r.HandleFunc("/debug/pprof/trace", pprof.Trace)
go tool pprof
命令格式:
pprof <format> [options] [binary] <source>
pprof [options] [binary] <source>
pprof -http [host]:[port] [options] [binary] <source>
想在浏览器查看,需要安装graphviz
web页面模式
go tool pprof -http=:6666 [file_pprof|url_pprof]
go tool pprof -http=:9999 cpu.pprof
go tool pprof -http=:9999 mem.pprof
命令行模式
go tool pprof [file_pprof|url_pprof]
常用:
go tool pprof -http=:9999 cpu.pprof
go tool pprof -http=:9999 /tmp/profile215959616/mem.pprof
go test -bench="Fib$" -cpuprofile=cpu.pprof .
go tool pprof -text cpu.pprof
https://blog.csdn.net/sinat_24985411/article/details/128816228
https://www.cnblogs.com/jiujuan/p/14588185.html
https://github.com/google/pprof/blob/main/doc/README.md
https://pkg.go.dev/runtime/pprof#hdr-Profiling_a_Go_program
https://www.cnblogs.com/jiujuan/p/14588185.html
相关文章:
Go pprof性能分析
pprof是Go语言内置的性能分析工具,它可以帮助我们分析程序的CPU使用情况、内存分配等。 pprof 包含两部分: Go语言内置的两个包 net/http/pprof 对 runtime/pprof 的二次封装,一般是服务型应用。比如 web server ,它一直运行。这…...

扬帆出海!九章云极DataCanvas公司惊艳亮相迪拜GITEX Global 2024
近日, 第44届GITEX GLOBAL展会(GITEX GLOBAL 2024)及全球领先的创业与投资盛会Expand North Star 2024在迪拜盛大启幕。九章云极DataCanvas公司惊艳亮相盛会,向全球观众展示智算领域最新研发进展与创新成果,在国际舞台…...
Qt | 元对象+元枚举+Qt自带图标案例
点击上方"蓝字"关注我们 01、QMetaObject >>> QMetaObject 是 Qt 中用于反射的一个类,提供了有关类的信息,包括属性、信号和槽等。它是 Qt 的元对象系统的核心部分,允许您在运行时获取有关 Qt 对象的详细信息。这种功能在使用 Qt 的信号与槽机制、属性系…...
linux升级cmake
如果出现如下报错,就应该升级cmake了! CMake Error at CMakeLists.txt:1 (cmake_minimum_required): CMake 3.1 or higher is required. You are running version 2.8.12.2 -- Configuring incomplete, errors occurred! 官网 可以下载各个版本的cma…...
ip a查看网卡接口信息
ip a命令是用于查看和管理网络接口信息的命令。通过执行ip a命令,可以查看当前系统上所有网络接口的配置信息,包括IP地址、子网掩码、网关、MAC地址等。该命令还可以用于配置网络接口的参数,如设置IP地址、启用或禁用接口等操作。 # ip a 1:…...
centos celery 日志管理
celery经常会产生大量日志,长时间累计下来会对服务器造成一定的压力 1 配置 logrotate 进行日志拆分 logrotate 是 Linux 系统中常用的日志管理工具。我们将使用它来管理 Celery 的日志文件,确保日志文件不会无限增长,并定期拆分、归档和删…...
深度学习(DL)实战——基本概念介绍
公众号:自学编程村,关注后,回复“书籍”,领取1000多本计算机书籍。涵盖语言语法、数据结构算法、AI相关书籍、开发相关等等各种书籍,应有尽有,你总会用到。 关注方式见主页或文章底部。想要加群可从公众号中…...
较新(24.3)加速Diffusion模型推理的方法,附带参考文献
1.采用fast ODE solvers: Karras, T., Aittala, M., Aila, T., Laine, S.: Elucidating the design space of diffusionbased generative models. In: Conference on Neural Information Processing Systems (NeurIPS) (2022) Lu, C., Zhou, Y., Bao, F., Chen, J…...
硬件产品经理的开店冒险之旅(上篇)
这是一篇流水账式的个人履历小结,算是迎接接下来的人生第二职业曲线。未来将不定期更新在第二职业方面的探索过程记录,既当作自己的冒险之旅记录,也期望有机会让自己的经历能在互联网上留下一些印记。 一些职业生涯小记:目前的状…...

「C++」类和对象最终回
目录 前言 初始化列表: 使用及特点: 总结: 案例分析: 类型转换 单参数构造函数: 多参数构造函数: static成员 友元 内部类 匿名对象 特点 使用方法: 匿名对象使用实例补充&#…...

ELK:Elasticsearch、Logstash、Kibana Spring Cloud Sleuth和Spring Cloud Zipkin
〇、虚拟机中docker安装elasticsearch 、Kibana、Logstash elasticsearch导入中文分词器 Logstash修改es数据库ip及创建索引名配置 一、elasticsearch数据库的结构 和mysql作比较,mysql中的数据库的二维表相当于es数据库的index索引结构;mysql数据库的二…...

动态规划17:123. 买卖股票的最佳时机 III
动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:123.…...
华为OD机试真题---预定酒店
华为OD机试真题中的“预定酒店”题目是一道典型的算法题,主要考察的是如何在给定的酒店价格数组中找到最接近心理价位的k个酒店,并按价格从低到高输出。以下是对该题目的详细解析: 一、题目描述 放暑假了,小明决定到某旅游景点游…...
力扣242.有效的字母异位词
题目链接:242. 有效的字母异位词 - 力扣(LeetCode) 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。 示例 1: 输入: s "anagram", t "nagaram"输出: true 示例 2: 输入: s &q…...
Android IP路由策略和防火墙
Android IP路由策略和防火墙 Platform: RK3368 OS: Android 6.0 Kernel: 3.10.0 文章目录 Android IP路由策略和防火墙ip route, ip rule, iptables简介ip routeip ruleiptables Android路由策略Android路由策略优先级命令查看当前路由策略 Android路由表命令查看路由表命令…...
MySQL insert ... select 语句锁表导致数据写不进去
问题现象 调用后台接口向表 t1 insert 写入数据时一直等待直到超时,猜测表 t1 被其它事务加锁了没有释放。 问题分析 在发生死锁时,通过执行下面命令查看事务和锁信息: select * from information_schema.INNODB_TRX 用来查看正在运行的事…...

Android摄像头Camera2和Camera1的一些总结
Android 系统对摄像头的同时使用有限制,不能同时使用摄像头进行预览或者录制音视频。 例如:界面上有两个SurfaceView, 这两个SurfaceView不能同时预览或者录制音视频,只能有一个正常工作(一个SurfaceView预览前置摄像头ÿ…...
【Linux 从基础到进阶】Linux中的用户认证与授权
Linux中的用户认证与授权 1. 引言 在Linux系统中,**用户认证(authentication)和授权(authorization)**是两个核心的安全机制,用来控制系统资源的访问和管理用户操作权限。用户认证确保登录的用户是合法的…...

用户界面设计:视觉美学与交互逻辑的融合
1、什么是用户界面 用户界面(UI)是人与机器之间沟通的桥梁,同时也是用户体验(UX)的重要组成部分。用户界面设计包括两个核心要素:视觉设计(即产品的外观和感觉)和交互设计ÿ…...

ZK集群搭建:详细步骤与注意事项
在大数据和分布式系统日益重要的今天,ZooKeeper(简称ZK)作为一种分布式协调服务,扮演着举足轻重的角色。它主要用于管理大型分布式系统中的配置信息、命名、同步等。下面将详细介绍如何搭建一个ZooKeeper集群,帮助大家…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...