ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

golang 性能优化分析:benchmark 结合 pprof

2021-04-01 03:01:09  阅读:258  来源: 互联网

标签:pprof benchmark bench golang go 测试 test cpu


前面 2 篇 golang 性能优化分析系列文章:

一、基准测试 benchmark 简介

在 golang 中,可以通过 benchmark 基准测试来测试代码性能。基准测试主要是通过测试 cpu 和内存的效率问题,来评估被测试代码的性能。

基准测试的指标:

  1. 程序所花费的时间
  2. 内存使用的情况
  3. cpu 使用情况

基准测试文件名和函数规定:

  • go 基准测试文件都是以 _test.go 结尾,和单元测试用例在同一个文件中。
  • 基准测试每个函数都是以 Benchmark 开头。

基准测试常用命令:

go test ./fib              // 不进行基准测试,对 fib 进行单元测试

go test -bench=. -run=none  // 进行基准测试,不进行单元测试,-run 表示执行哪些单元测试和测试函数,一般函数名不会是 none,所以不执行单元测试
// 上面的测试命令还可以用空格隔开,意义是一样
go test -bench . -run none

go test -bench=.    // 对所有的进行基准测试

go test -bench='fib$'     // 只运行以 fib 结尾的基准测试,-bench 可以进行正则匹配

go test -bench=. -benchtime=6s  // 基准测试默认时间是 1s,-benchtime 可以指定测试时间
go test -bench=. -benchtime=50x  // 参数 -benchtime 除了指定时间,还可以指定运行的次数

go test -bench=. -benchmem // 进行时间、内存的基准测试

说明:上面的命令中,-bench 后面都有一个 . ,这个点并不是指当前文件夹,而是一个匹配所有测试的正则表达式。

更多参数说明请查看帮助:go help testflag

分析基准测试数据:

  • cpu 使用分析:-cpuprofile=cpu.pprof
  • 内存使用分析:-benchmem -memprofile=mem.pprof
  • block分析:-blockprofile=block.pprof

在配合 pprof 就可以进行分析。

运行命令采样数据:

go test -bench=. -run=none -benchmem -memprofile=mem.pprof
go test -bench=. -run=none -blockprofile=block.pprof

go test -bench=. -run=none -benchmem -memprofile=mem.pprof -cpuprofile=cpu.pprof

二、代码示例

2.1 代码示例

fib.go:

package main

func Fib(n int) int {
	if n < 2 {
		return n
	}

	return Fib(n-1) + Fib(n-2)
}

fib_test.go:

package main

import (
	"testing"
)

func BenchmarkFib(b *testing.B) {
	// 运行 Fib 函数 b.N 次
	for n := 0; n < b.N; n++ {
		Fib(20)
	}
}

func BenchmarkFib2(b *testing.B) {
	// 运行 Fib 函数 b.N 次
	for n := 0; n < b.N; n++ {
		Fib(10)
	}
}

2.2 运行命令采集数据

go test -bench=. -run=none \
-benchmem -memprofile=mem.pprof \
-cpuprofile=cpu.pprof \
-blockprofile=block.pprof

也可以用一个一个命令来完成采集数据,分开运行:

go test -bench=. -run=none -benchmem -memprofile=mem.pprof
go test -bench=. -run=none -benchmem -cpuprofile=cpu.pprof

2.3 分析数据

前面有 两篇 pprof 的文章怎么分析数据,一种方法是命令行交互分析模式,一种是可视化图形分析模式。

A. 命令行交互分析

分析 cpu:

go tool pprof cpu.pprof

再用 top15 命令分析,或者 top --cum 进行排序分析

如下图:

B. web 界面分析

命令行执行命令:

go tool pprof -http=":8080" cpu.pprof

会自动在浏览器上打开地址:http://localhost:8080/ui/ ,然后就可以在浏览器上查看各种分析数据,如下图:

其他数据也可以进行同样的分析,这里就略过。

[完]

标签:pprof,benchmark,bench,golang,go,测试,test,cpu
来源: https://www.cnblogs.com/jiujuan/p/14604609.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有