这是我参与「第五届青训营 」笔记创作活动的第3天
性能分析工具 pprof
可以帮助我们知道应用在什么地方耗费了多少CPU、内存
同时它也是一个用于可视化和分析性能分析数据的工具
项目实战 pprof-排查实战
编译运行ing
可用的程序运行采样数据,直接在url后加上就行
实际运行效果
直接点击对应链接即可查看相应数据
具体排查——CPU
直接在终端使用以下命令来查看CPU使用情况(采集10s)
go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
输入命令后,进入了(pprof)终端,如图:
top命令:查看占用资源最多的函数
- flat:当前函数本身执行耗时
- flat%:flat占CPU总时间的比例
- sum%:上面一行的flat%总和
- cum:指当前函数本身加上其调用函数的总耗时
- cum%cum占CPU总时间的比例
ps注意两个关键点
Flat == Cum:函数中没有其他调用,消耗都来自于自身函数逻辑
Flat == 0:函数中只有其他函数调用
命令:LIST + 函数
根据指定正则表达式查找代码行
效果:可以看到存在一个啥也不干的循环,所以我们直接去注释掉它
注释之后,再次用top命令查看,如图,显然耗费时间要少多了
命令:web
实现调用关系可视化
如图:邮电问题(。。
具体排查——堆内存
可视化貌似邮电问题,推荐第二条命令,与CPU类似,我们直接继续使用top命令来查看内存使用情况,然后再用list+函数,如图:
go tool pprof -http=:8080 "http//localhost:6060/debug/pprof/heap"//可视化
go tool pprof http://localhost:6060/debug/pprof/heap
将对应代码注释掉,就可以优化占用内存的问题
具体排查——协程、锁(mutex)
命令与CPU和内存类似 只要将命令后缀换一下就行
——————————————分割线
1.16课程复习——作业
项目需求:
- 实现一个展示话题(标题,文字描述)和回帖列表的后端http接口;
- 本地文件存储数据
Web框架
Gin
go Web框架的简单使用
详细请参考官方说明文档,还有简体中文版,太棒了
记录搭建一个简单的Demo
注意创建新的go文件时,要创建go.mod文件
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
快速入门 | Gin Web Framework (gin-gonic.com)
分层模型设计
数据层 数据Model,外部数据的增删改查,对service层透明
逻辑层 业务Entity,处理核心业务逻辑输出
视图层 视图view,外部和外部的交互逻辑