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集群,帮助大家…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...