首页 > 其他分享 >Go-性能优化、优化分析、调优实战pprof

Go-性能优化、优化分析、调优实战pprof

时间:2024-11-07 10:14:59浏览次数:3  
标签:协程 pprof 切片 调优 内存 go 优化

使用官方自带benchmark进行基准性能测试
在这里插入图片描述第一个是函数名-核数 第二个是执行次数 第三个是一次执行时间
第四个是一次执行的多大的内存 第五个是一次执行申请几次内存

slice用的时候在make()初始化切片时提供容量信息

data:=make([]int,0)
data:=make([]int,0,size)//good pre

slice:Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
在已有切片基础上创建切片,不会创建新的底层数组。
在这里插入图片描述所以如上图所示:最好是copy而不是re-slice 差距能好多倍内存

2.map的预分配和slice是类似的 还是预分配就是好的

3.字符串处理:使用string builder更好

4.使用atomic包可以显著提升时间性能(相比于加锁 锁是os弄的 成本高,atomic是硬件实现的。)

预期:避免常见的陷阱
普通的应用不要一味追求性能
越高级的优化手段越容易出现问题
优化的前提是正确可靠、简洁清晰

性能调优原则:

依靠数据而不是猜测(benchmark)
定位最大的优化空间 最大的瓶颈 而不是细枝末节
不要过早优化 没必要 出现问题再说
不要过度优化 因为还得迭代 逻辑可能不兼容

性能分析工具pprof

go get -d github.com/wolfogre/go-pprof-practice
cd $GOPATH/src/github.com/wolfogre/go-pprof-practice
go build
./go-pprof-practice

运行后注意查看一下资源是否吃紧,机器是否还能扛得住,坚持一分钟,如果确认没问题,咱们再进行下一步。

控制台里应该会不停的打印日志,都是一些“猫狗虎鼠在不停地吃喝拉撒”。没有意义,不用细看。

1.排查CPU占用

go tool pprof http://localhost:6060/debug/pprof/profile?seconds=10

在这里插入图片描述输入top之后
在这里插入图片描述解释:
flat是当前函数本身的执行耗时
sum%是上面每一行的flat%总和
cum是当前函数本身加上其调用函数的总耗时
cum%是cum占CPU总时间的比例
能发现tiger.eat是最大的占用

输入list Eat
在这里插入图片描述发现消耗了5.59s的是这一行代码 循环了好多好多好多次

2.排查RAM占用
对于内存RAM的排查 类似上面的 也可以通过任务管理器来看出来异常占用。

3.排查协程
由于 golang 自带内存回收,所以一般不会发生内存泄露。但凡事都有例外,在 golang 中,协程本身是可能泄露的,或者叫协程失控,进而导致内存泄露。

我们在浏览器里可以看到,此时程序的协程数已经多达 116条:

在这里插入图片描述

go tool pprof http://localhost:6060/debug/pprof/goroutine

同样是 top、list、web 大法:发现问题在:

func (w *Wolf) Drink() {
	log.Println(w.Name(), "drink")
	for i := 0; i < 10; i++ {
		go func() {
			time.Sleep(30 * time.Second)//这里很大问题
		}()
	}
}

可以看到,Drink 函数每次会释放 10 个协程出去,每个协程会睡眠 30 秒再退出,而 Drink 函数又会被反复调用,这才导致大量协程泄露,试想一下,如果释放出的协程会永久阻塞,那么泄露的协程数便会持续增加,内存的占用也会持续增加,那迟早是会被操作系统杀死的。

总结:pprof可以通过网页和可视化终端来分析性能问题
可以采样CPU 堆内存 协程 锁 阻塞 线程创建 等等问题

标签:协程,pprof,切片,调优,内存,go,优化
From: https://blog.csdn.net/qq_51234298/article/details/143571984

相关文章

  • 剑侠情缘2Online单机安装教程+汉化第六版任务优化+GM
    天给大家带来一款单机游戏的架设:剑侠情缘2Online只适用于单机娱乐,此教程是本人亲测所写,踩坑无数,如果你是小白跟着教程走也是可以搭建    亲测视频演示https://githubs.xyz/show/303.mp4 游戏安装步骤此游戏架设需要安装虚拟机,没有虚拟机的请先安装虚拟机,请见:ht......
  • 优化生产流程:Ftrans机台设备数据采集方案智能解决!
    机台设备数据采集在工业生产与制造、能源管理、交通运输、建筑物管理以及医疗健康等多个领域都有着广泛的应用场景。机台设备数据采集可以提高生产效率与质量控制、降低运营成本与维护成本、提升决策效率与准确性等。企业通常采取FTP脚本进⾏统一机台设备数据采集,虽然可以满⾜基础......
  • 基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
    1.程序功能描述基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出ACO优化的收敛曲线,规划路径结果和每一条路径的满载率。2.测试软件版本以及运行结果展示MATLAB2022a版本运行 3.核心程序%搜索fori=1:Iterationiis_best=0;forj=1:Npop......
  • 5个维度对Kubernetes集群优化
    5个维度对Kubernetes集群优化一、节点配额和内核参数调整对于公有云上的Kubernetes集群,规模大了之后很容器碰到配额问题,需要提前在云平台上增大配额。这些需要增大的配额包括:虚拟机个数vCPU个数内网IP地址个数公网IP地址个数安全组条数路由表条数持久化存储大小......
  • PHP常见性能瓶颈分析与优化策略
    PHP常见性能瓶颈分析与优化策略在现代网站和应用开发中,PHP作为一种广泛使用的服务器端脚本语言,其性能优化至关重要。尽管PHP的易用性和强大的功能受到开发者青睐,但在高并发和大流量的环境下,性能瓶颈常常会影响网站的响应速度和用户体验。本文将分析PHP常见的性能瓶颈,并探讨相应的......
  • 网站关键词挖掘与优化:解锁流量潜力的关键
    在当今数字化时代,搜索引擎已成为人们获取信息、产品和服务的主要途径。对于网站运营者来说,如何有效地挖掘并优化关键词,以提升网站在搜索引擎结果页(SERP)中的排名,进而吸引更多目标流量,是至关重要的一环。本文将深入探讨网站关键词挖掘与优化的策略,帮助网站管理者解锁流量潜力,实......
  • DP问题空间的优化
    1.消去作为“层数”的那一维如果状态转移时需要用到这一层和上一层的信息,此时往往需要改变枚举顺序例如:\(01\)背包#include<iostream>#include<algorithm>usingnamespacestd;constintN=1010;intw[N],v[N];intf[2][N],n,m;intmain(){cin>>n>......
  • Python 爬取大量数据如何并发抓取与性能优化
    Python并发抓取与性能优化在进行网络爬虫开发时,爬取大量数据可能非常耗时。尤其是在处理许多网页或API请求时,逐个请求速度会非常慢。为了解决这个问题,我们可以通过并发抓取提高爬取效率。同时,通过性能优化来进一步减少耗时和资源占用,使爬虫更高效。本篇文章将带大家了解......
  • MySQL 索引的底层实现原理与优化策略
    在数据库中,索引是提升查询性能的关键工具。MySQL中的索引机制可以显著加快数据检索速度,尤其在数据量庞大的情况下,合理使用索引可以使得原本耗时的操作变得高效。然而,滥用或错误地使用索引也可能对性能产生负面影响。本文将深入探讨MySQL索引的底层实现原理、常用类型及其......
  • 实践中如何优化 MySQL:深入剖析与策略分享
    MySQL作为一款广泛应用的关系型数据库管理系统,在企业级应用和互联网服务中扮演着重要的角色。然而,随着业务规模的增长和数据量的增加,如何有效地优化MySQL性能,确保系统在高并发、大数据量的环境下仍能高效运行,成为开发者和数据库管理员的重要课题。本文将深入探讨MySQL......