GO语言性能分析
Go语言基准测试与pprof工具性能分析详解
在现代软件开发中,性能优化是一个重要的环节。Go语言提供了强大的工具来进行基准测试和性能分析,其中 testing 包用于基准测试,而 pprof 工具用于性能分析。本文将详细讲解如何使用这些工具来进行性能优化。
参考文档:Go 语言中的大杀器
一、基准测试
基准测试(Benchmarking)是评估代码性能的常用方法。Go语言的 testing 包提供了便捷的基准测试功能。
1. 基准测试函数
基准测试函数的命名必须以 Benchmark 开头,并接受一个 *testing.B 类型的参数。以下是一个简单的基准测试示例:
package mainimport ("fmt""strings""testing"
)func BenchmarkStringBuilder(b *testing.B) {strs := []string{"Hello", "World", "Golang", "is", "awesome", "and", "powerful", "for", "string", "concatenation"}b.ResetTimer()for i := 0; i < b.N; i++ {var builder strings.Builderfor _, str := range strs {builder.WriteString(str)}_ = builder.String()}
}
2. 运行基准测试
你可以使用以下命令来生成不同类型的性能分析数据文件:
1. 生成 CPU 性能分析数据文件
go test -bench=. -cpuprofile=cpu.profile
2. 生成内存分配的性能分析数据文件
go test -bench=. -memprofile=mem.profile
3. 生成阻塞操作的性能分析数据文件
go test -bench=. -blockprofile=block.profile
4. 生成互斥锁争用的性能分析数据文件
go test -bench=. -mutexprofile=mutex.profile
5. 生成执行跟踪数据文件
go test -bench=. -trace=trace.out
本次在终端中运行以下命令来执行基准测试:
go test -run=^$ -bench=StringBuilder -cpuprofile=cpu.prof -memprofile=mem.prof
命令解释:
go test -run=^$ -bench=StringBuilder -cpuprofile=cpu.prof -memprofile=mem.prof
-run=^$ 代表只运行基准测试, 否则会运行其余的单元测试函数
-cpuprofile=cpu.prof -memprofile=mem.prof 输出对应的prof文件
输出示例:
goos: darwin
goarch: amd64
pkg: main/utils
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkStringBuilder-12 7450434 155.8 ns/op
PASS
ok main/utils 2.062s
3. 基准测试结果解读
BenchmarkStringBuilder-12:表示在12个CPU核心上运行的基准测试。7450434:表示基准测试运行的次数。155.8 ns/op:表示每次操作的平均时间。
二、pprof工具
pprof 是 Go语言内置的性能分析工具,用于分析CPU和内存等使用情况。
1. 安装pprof
pprof 工具通常随Go语言安装包一起提供。如果没有安装,可以使用以下命令安装:
go get -u github.com/google/pprof
2. CPU性能分析
使用pprof工具分析通过基准测试生成的cpu.prof文件,在终端中运行以下命令:
go tool pprof -http=:6060 cpu.prof
web图形化查看对应的prof文件
进入pprof交互界面
http://localhost:6060/ui/
通过火焰图分析主要的CPU消耗

三、总结
通过本文的介绍,你应该已经了解了如何在Go语言中进行基准测试,并使用pprof工具进行性能分析。这些工具可以帮助你识别和优化代码中的性能瓶颈,从而提高应用的整体性能。希望本文对你有所帮助!
相关文章:
GO语言性能分析
Go语言基准测试与pprof工具性能分析详解 在现代软件开发中,性能优化是一个重要的环节。Go语言提供了强大的工具来进行基准测试和性能分析,其中 testing 包用于基准测试,而 pprof 工具用于性能分析。本文将详细讲解如何使用这些工具来进行性能…...
关于 PreparedStatement
Mysql 层面的语法也支持 prepare 这个确实第一次见 PREPARE prepares a statement for execution (see Section 13.5.1, “PREPARE Statement”).EXECUTE executes a prepared statement (see Section 13.5.2, “EXECUTE Statement”).DEALLOCATE PREPARE releases a prepared…...
漫谈设计模式 [9]:外观模式
引导性开场 菜鸟:老鸟,我最近在做一个项目,感觉代码越来越复杂,我都快看不懂了。尤其是有好几个子系统,它们之间的调用关系让我头疼。 老鸟:复杂的代码确实让人头疼。你有没有考虑过使用设计模式来简化你…...
多进程编程
基本概念 进程是一个具有单独功能的程序对某个数据集在处理机上的执行过程,进程也是作为资源分配的一个单位。 进程和程序是相辅相成的,进程是一个动态概念。 进程具有并行性特征。进程具有独立性和异步性。 进程的描述 进程分为三部分:…...
7-Zip压缩包如何添加密码,加密后如何取消
压缩包文件大家经常使用,最熟悉的肯定是RAR、ZIP格式压缩文件,但是7z压缩文件格式也很好用,它是三种压缩文件格式中压缩率最大的。想要将文件压缩到最小,使用7z格式可以达到最大化。那么在使用7z压缩格式的时候,我们可…...
HarmonyOS---应用测试概述
一、应用质量要求 应用质量要求分为应用体验质量建议和应用内容合规要求两大部分。 1、应用体验质量建议 功能数据完备、基础体验要求、HarmonyOS特征增强体验要求。 (1)功能数据完备 (2)基础体验要求 (3)增…...
密码学---真题演练
✨Base加密:题目-base? 靶场网址:https://polarctf.com/ Base100加密!!! 得到的新的一串密码是 rot47 密码,属于凯撒密码的一种变体. ✨斐波那契:题目-FB 从第三项开始,每一项都等…...
时间日期工具类
时间日期工具类 import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit;public class DateTimeUtils {private static final String DEFAULT_DATE_FORMAT "yyyy-MM-dd";private static final String DEFAULT_TIME_…...
linux中vim常用命令大全
前言 Linux有大量的配置文件,所以 Linux的文本处理工具也是比较多的,其中编辑一些配置文件时,常用的工具就是 vim。在Linux中,Vim编辑器是一个非常强大的文本编辑工具,它提供了多种模式和命令来满足不同的编辑需求。以…...
计算机的错误计算(八十九)
摘要 探讨反双曲余切函数 acoth(x) 在 附近的计算精度问题。 Acoth(x) 函数的定义为: 其中 x 的绝对值大于 1 . 例1. 计算 acoth(1.000000000002) . 不妨在 Excel 的单元格中计算,则有: 若在Python中用定义直接计算,则有几乎…...
深入理解java并发编程之aqs框架
跟synchronized 相比较,可重入锁ReentrankLock其实原理有什么不同? 所得基本原理是为了达到一个目的;就是让所有线程都能看到某种标记。synchronized通过在对象头中设置标记实现了这一目的,是一种JVM原生的锁实现方式。而Reentran…...
ubuntu配置tftp、nfs
tftp配置 tftp是简单文件传输协议,基于udp实现传输。这里的简单文件,指的是不复杂、开销不大的文件。 先在ubuntu中安装tftp,输入命令:sudo apt-get install tftp-hpa tftpd-hpa。 接着配置tftp。 输入命令:sudo v…...
Sklearn的datasets模块与自带数据集介绍
datasets 模块 用 dir() 函数查看 datasets 模块的所有属性和函数 import sklearn.datasets as datasets# 列出 sklearn.datasets 模块中的所有属性和函数 print(dir(datasets)) datasets 模块下的数据集有三种类型: (1)load系列的经典数…...
css 个人喜欢的样式 速查笔记
起因, 目的: 记录自己喜欢的, 觉得比较好看的 css. 下次用的时候,直接复制,很方便。 1. 个人 html 模板, 导入常用的 link 设置英语字体: Noto导入默认的 css使用网络 icon 图标导入 Bootstrap css 框架 html <…...
C/C++ let __DATE__ format to “YYYY-MM-DD“
C/C let DATE format to “YYYY-MM-DD” code: #include <iostream> #include <string>class compileDate {// 静态函数,用来格式化并返回编译日期 static std::string formatCompileDate() {// 编译时的日期,格式为 "MMM…...
git如何灵活切换本地账号对应远程github的两个账号
git如何灵活切换本地账号对应远程github的两个账号 问题: 有时候我们会同时维护两个github的账号里面的仓库内容,这时候本地git需要频繁的切换ssh,以方便灵活的与两个账号的仓库可以通信。这篇日记将阐述我是怎么解决这个问题的。1. 第一个账…...
Python中实现函数的递归调用
在Python中,函数的递归调用是一种非常强大且常用的编程技巧,它允许函数在其执行过程中调用自身。递归调用在解决许多问题时都显得尤为方便,比如遍历树形结构、计算阶乘、实现快速排序等。然而,递归也需要谨慎使用,因为…...
Multisim使用手册
目录 原件库: 基础元件库: 最右侧的分析仪们: 示波器: 交流分析: 操作: dB 一、幅频特性曲线 二、相频特性曲线 下载资源(有汉化):Multisim 14.0电路设计与仿真…...
线程的六种状态
优质博文:IT-BLOG-CN 线程的状态在Thread.State这个枚举类型中定义:共有6种状态,可以调用线程Thread种的getState()方法获取当前线程状态。 public enum State { /** * 新建状态(New): * 当用new操作符创建一个线程时&#…...
全球热门剪辑软件大搜罗
如果你要为你的视频进行配音那肯定离不开音频剪辑软件,现在有不少音频剪辑软件免费版本就可以实现我们并不复杂的音频剪辑操作。这次我就给你分享几款能提高剪辑效率的音频剪辑工具。 1.福晰音频剪辑 链接直达>>https://www.foxitsoftware.cn/audio-clip/ …...
用Image-to-Video为你的图片注入灵魂:动态效果生成全攻略
用Image-to-Video为你的图片注入灵魂:动态效果生成全攻略 1. 引言:让静态图片动起来 想象一下,你拍了一张完美的风景照,但总觉得少了点什么——如果云能飘动、树叶能摇曳、水面能泛起波纹,那该多好?这就是…...
SecGPT-14B部署教程:适配国产昇腾910B的vLLM分支编译与性能调优
SecGPT-14B部署教程:适配国产昇腾910B的vLLM分支编译与性能调优 1. SecGPT-14B简介 SecGPT是由云起无垠推出的开源大语言模型,专注于网络安全领域。该模型融合了自然语言理解、代码生成和安全知识推理等能力,旨在为安全专业人员提供智能辅助…...
HunyuanVideo-Foley私有部署全攻略:RTX4090D专用优化,轻松搭建AI视频生成环境
HunyuanVideo-Foley私有部署全攻略:RTX4090D专用优化,轻松搭建AI视频生成环境 在AI视频生成领域,最令人沮丧的莫过于看着别人的演示视频效果惊艳,而自己却卡在环境配置和模型部署的泥潭中。从CUDA版本冲突到显存不足崩溃…...
OpenClaw性能调优:Qwen3-32B在RTX4090D上的参数配置
OpenClaw性能调优:Qwen3-32B在RTX4090D上的参数配置 1. 为什么需要性能调优 当我第一次在RTX4090D上部署Qwen3-32B模型时,本以为高端硬件能轻松应对所有任务。但实际使用OpenClaw执行自动化流程时,却发现响应时快时慢,有时甚至出…...
TEA加密算法实战:用Python和C语言实现QQ同款加密(附完整代码)
TEA加密算法实战:从原理到跨语言实现 在即时通讯和物联网设备中,数据安全传输一直是核心需求。TEA(Tiny Encryption Algorithm)以其轻量级、高效率的特性,成为资源受限环境下的理想选择。本文将深入探讨TEA算法家族的工…...
VMware ESXi 上玩转 SmartX 超融合社区版:OVF 镜像部署全攻略(含网络配置避坑指南)
VMware ESXi 上部署 SmartX 超融合社区版:OVF 镜像实战指南 虚拟化管理员们常常面临一个现实困境:如何在有限的硬件资源下快速体验企业级超融合架构?SmartX 超融合社区版通过 OVF 镜像部署方案,为 VMware ESXi 环境提供了轻量级验…...
ABC系统实战指南:逻辑综合与形式验证的数字电路设计工具
ABC系统实战指南:逻辑综合与形式验证的数字电路设计工具 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代数字电路设计流程中,逻辑综合与形式…...
保姆级教程:在Ubuntu 20.04上搞定海思SS524/SS522 SDK编译与固件烧录
海思SS524/SS522开发实战:从零构建嵌入式Linux系统的完整指南 作为一名长期深耕嵌入式开发的工程师,我深知从零开始搭建一个完整的开发环境有多么令人头疼。特别是当你拿到一块全新的开发板,面对陌生的SDK和工具链时,那种既兴奋又…...
Deepfake Offensive Toolkit Docker部署:跨平台解决方案详解
Deepfake Offensive Toolkit Docker部署:跨平台解决方案详解 【免费下载链接】dot The Deepfake Offensive Toolkit 项目地址: https://gitcode.com/gh_mirrors/dot/dot Deepfake Offensive Toolkit(简称dot)是一款功能强大的深度学习…...
汽车电子测试人的 Prompt 工程
专栏:《AI 汽车电子测试实战》第 17 篇 作者:一线汽车电子测试工程师 适合人群:所有使用 AI 的测试工程师、想提升 AI 使用效率的测试人员开篇:为什么需要学 Prompt? 这是我上个月在某车企的 AI 培训项目中的真实经历。…...
