最新开发了一个go项目, 目前已经上线, 昨天研究了性能测试, 那就对之前做的项目进行一个性能分析吧
给beeg项目添加pprof功能. 百度查了, 说beego是支持pprof的, 只需要在配置文件中beego.PprofOn = true开启即可, 但我试了似乎不行. 采用另一种方法
import(
_ net/http/pprof
)
go func() {
http.ListenAndServe("localhost:8888", nil)
}()
这里定义了一个协程, 我直接把这个协程放在main启动函数里了, 和main函数一起启动监听程序
为什么我们的heap才是2, 原因是,这个项目我是刚刚启动的。 随着请求访问的增加,连接数也会增加。 后面我们来模拟大量http请求, 具体含义如下
从图中看, cpu的使用是0, heap的使用是2, 所以, 我们查看heap.
go tool pprof http://127.0.0.1:8888/debug/pprof/heap
然后输入web, 生成svg文件, 直接用浏览器打开, 如下:
inuse_space表示的是数据的类型是实时数据
通过这个图, 我们看到main调用以后的执行过程, 每一步的耗时是多少。
第五步: 模拟并发, 测试性能
1. 下载一个模拟http请求的工具wrk(模拟现实, 了解系统瓶颈, 将服务器置于一个繁忙的状态, 就像生产环境一样. ), 下载地址: https://github.com/wg/wrk.git
在github上也有这个工具的介绍,
git clonehttps://github.com/wg/wrk.git
cd wrk
make
备注: 整个操作参考github上的说明即可.
2. 安装好wrk以后, 模拟批量请求
./wrk -c400 -t8 -d5m http://localhost:8888/deer/v1/user/login
我模拟的是批量登录, 参数含义如下
3. 在浏览器输入
http://localhost:8888/debug/pprof/
查看使用情况:
4. awk执行完以后, 查看执行结果汇总
5. 接下来用go tool pprof 查看 heap
go tool pprof -alloc_space/-inuse_space http://localhost:8888/debug/pprof/heap
可以清晰的看到两块占内存使用最多的地方, 第一个是bufio的Writer和Reader, 另一个是操作数据库。 这样我们就可以有针对性的进行优化了