Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Golang调优指南 #16

Open
xpzouying opened this issue Sep 27, 2020 · 0 comments
Open

Golang调优指南 #16

xpzouying opened this issue Sep 27, 2020 · 0 comments

Comments

@xpzouying
Copy link
Owner

xpzouying commented Sep 27, 2020

常常需要对Golang进行优化,在这里总结一下Golang常用的调优技巧和流程。

调优步骤

  1. 生成profile数据文件
  2. 使用工具分析profile数据文件
  3. 优化代码
  4. 重复步骤1

详细过程

如何生成profile数据文件

常用的生成数据文件的方式有三种:

1、挂载profile handler到HTTP Server上。
该方法常常应用到HTTP Server上,监听运行中的服务状态。基本步骤为:

  1. 挂载net/http/pprof到HTTP Handler
  2. 启动服务
  3. 请求debug/pprof相应的接口输出数据文件

详细内容参考:net/http/pprof

2、使用runtime/pprof输出数据文件。
该方法的基本原理是,找到需要调优的热点代码块,

  1. 在进入代码块时,开始记录;
  2. 在结束代码块时,结束记录。

详细内容参考:runtime/pprof

3、编写压力测试用例(Benchmark)输出数据文件。
该方法的基本原理是:对热点函数编写对应的压测用例,运行压测输出profile数据文件。基本流程为:

  1. 编写benchmark测试用例
  2. 运行benchmark压测并生成profile数据文件:go test -cpuprofile cpu.prof -memprofile mem.prof -bench .

详细内容参考:

如何分析profile数据文件

经过上面的流程,可以获取对应的profile数据文件。使用使用go tool pprof cpu.prof/mem.prof打开对应的数据文件。

工具界面如下,

image

常用的命令有:

  • top:查看每个函数的耗时。
  • top -cum:查看每个函数的累计耗时,包括函数内部的其他调用耗时。如果函数A中包括的函数B,那么函数A的耗时也包含了函数B的耗时。
  • list:list命令后面接函数名,如list func1,查看函数func1中的详细消耗情况。
  • web:打开浏览器,查看图形调用关系耗时。
  • weblist:类似于list,浏览器中显示。

更详细的可以参考:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant