Go语言入门(三) | 青训营笔记

155 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

今天简单了解一下测试以及性能调优方面的知识。

GO测试

  • 运行一下go-project-exmple/concurrence/goroutine.go的单元测试(-v表示打印详细信息),但是这个单元测试文件作者只是为了测试go test的使用效果,没有真正测试。

image.png 单元测试主要包括,输入,测试单元,输出,以及校对,单元的概念比较广,包括接口,函数,模块等;用最后的校对来保证代码的功能与我们的预期相符;单侧一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性。另一方面可以提升效率,在代码有bug的情况下,通过编写单测,可以在一个较短周期内定位和修复问题。 image.png

Mock

Mock工具地址:github.com/bouk/monkey

Monkey是一个开源的mock测试库,可以对method,或者实例的方法进行mock,反射,指针赋值Mockey Patch 的作用域在 Runtime,在运行时通过通过 Go 的 unsafe 包,能够将内存中函数的地址替换为运行时函数的地址,将待打桩函数或方法的实现跳转到。

image.png

pprof性能分析工具

项目地址:github.com/wolfogre/go…

1. 介绍

在浏览器中打开http://localhost:6060/debug/pprof, 可以看到下面这个图片的界面,页面上展示了可用的程序运行采样数据,下面是相关功能的解释

  allocs:内存分配情况
  blocks:阻塞操作情况
  cmdline:程序启动命令
  goroutine:当前所有goroutine的堆栈信息
  heap:堆上内存使用情况(同alloc)
  mutex:锁竞争操作情况
  profile: CPU占用情况
  threadcreate:当前所有创建的系统线程的堆栈信息
  trace:程序运行跟踪信息

image.png

2. 优化CPU

在终端界面中输入: go tool pprof http://localhost:6060/debug/pprof/profile?seconds=10" 先使用pprof工具先采集10秒的数据到文件中,然后再开始接受命令去展示性能分析的结果。

image.png 输入top命令,查看占用CPU资源较多的调用,每列的参数为:

   flat:当前函数本身的执行耗时(flat == 0 则函数中只有其他函数的调用)
  flat%:flat占CPU总时间的比例
  sum%:上面每一行的flat%的总和
  cum:指当前函数本身加上其调用函数的总耗时
  cum%:cum占总量的比例

image.png 表格前面描述了采样的总体信息。默认会展示资源占用最高的10个函数,如果只需要查看最高的N个函数,可以输入topN。

总结

性能调优的流程很长,用实际的结果做决策对于pprof工具,可以通过分析实际的程序熟悉相关功能,重点是要保证正确性,不影响功能,同时定位主要问题,对以后的学习工作提供了帮助,有错误的地方欢迎大家指出来一起探讨!!