这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
今天简单了解一下测试以及性能调优方面的知识。
GO测试
- 运行一下
go-project-exmple/concurrence/goroutine.go的单元测试(-v表示打印详细信息),但是这个单元测试文件作者只是为了测试go test的使用效果,没有真正测试。
单元测试主要包括,输入,测试单元,输出,以及校对,单元的概念比较广,包括接口,函数,模块等;用最后的校对来保证代码的功能与我们的预期相符;单侧一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性。另一方面可以提升效率,在代码有bug的情况下,通过编写单测,可以在一个较短周期内定位和修复问题。
Mock
Mock工具地址:github.com/bouk/monkey
Monkey是一个开源的mock测试库,可以对method,或者实例的方法进行mock,反射,指针赋值Mockey Patch 的作用域在 Runtime,在运行时通过通过 Go 的 unsafe 包,能够将内存中函数的地址替换为运行时函数的地址,将待打桩函数或方法的实现跳转到。
pprof性能分析工具
1. 介绍
在浏览器中打开http://localhost:6060/debug/pprof, 可以看到下面这个图片的界面,页面上展示了可用的程序运行采样数据,下面是相关功能的解释
allocs:内存分配情况
blocks:阻塞操作情况
cmdline:程序启动命令
goroutine:当前所有goroutine的堆栈信息
heap:堆上内存使用情况(同alloc)
mutex:锁竞争操作情况
profile: CPU占用情况
threadcreate:当前所有创建的系统线程的堆栈信息
trace:程序运行跟踪信息
2. 优化CPU
在终端界面中输入:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=10"
先使用pprof工具先采集10秒的数据到文件中,然后再开始接受命令去展示性能分析的结果。
输入
top命令,查看占用CPU资源较多的调用,每列的参数为:
flat:当前函数本身的执行耗时(flat == 0 则函数中只有其他函数的调用)
flat%:flat占CPU总时间的比例
sum%:上面每一行的flat%的总和
cum:指当前函数本身加上其调用函数的总耗时
cum%:cum占总量的比例
表格前面描述了采样的总体信息。默认会展示资源占用最高的10个函数,如果只需要查看最高的N个函数,可以输入topN。
总结
性能调优的流程很长,用实际的结果做决策对于pprof工具,可以通过分析实际的程序熟悉相关功能,重点是要保证正确性,不影响功能,同时定位主要问题,对以后的学习工作提供了帮助,有错误的地方欢迎大家指出来一起探讨!!