这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
本文记录的是录播视频中遇到的不会的知识点,并不会一贯地按着ppt来罗列一些知识点,仅仅代表我个人的一些观点与看法,欢迎各位大佬指点问题。
来聊聊性能优化
简介
首先需要知道性能调优的一些原则:
我们希望知道应用在上面地方耗费了多少CPU,Memory
pprof
用一个项目当做实例(当中有很多炸弹)
先在vscode中使用go run main.go来启动服务
再在浏览器中访问 http://localhost:6060/debug/pprof/ 可以查看指标
借助数据可视化工具
- 排查CPU问题
在终端输入命令
go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
top 命令 :查看占用资源最多的函数
list命令 :根据指定的正则表达式查找代码行
web命令:调用关系可视化(很直观)
- 排查内存问题
堆内存!!!
堆内存并不是字面意思上的讲与堆这种数据结构有关,而是一种动态分配指定大小的内存的一种管理机制
堆内存是一种按需分配的动态内存管理机制(这里的动态是指什么时候申请就什么时候给你,申请多少给你多少,而不是像栈内存那样只要调了函数就直接把所有本次调用可能用到的内存都给你,不管你具体什么时候用),这种机制能让数据在内存里存活时间超过定义它的函数的生命周期(不去销毁就一直在那儿),也能让多个线程共享同一个内存里的结构体/对象(任何线程只要拿到这片内存的地址和大小就能访问)。但是由于它的动态,你不能仅靠一个变量名就知道每一份数据在内存里的确切位置,导致要访问它里面的数据必须通过指针或引用。
我们可以在那个pprof命令加点参数(指定端口),来获得更加直观的可视化分析数据
go tool pprof -http:8080 "http://localhost:6060/debug/pprof/profile?seconds=10"
着重介绍那个火焰图