需要可视化工具graphviz
这里使用了之前的无锁并发缓存做示例无锁并发缓存实现
将main()函数单独放到test文件中
// cache_test.go
package NoneLockCacheimport ("log""sync""testing")func BenchmarkMemo_Get(b *testing.B) {urls := []string{"http://www.baidu.com","http://www.163.com","http://www.qq.com","http://www.baidu.com","http://www.baidu.com","http://www.163.com","http://www.qq.com","http://stackoverflow.com","http://stackoverflow.com",}m := New(httpGetBody)var n sync.WaitGroupfor i := 0; i < b.N; i++ {for _, url := range urls {n.Add(1)go func(url string) {_, err := m.Get(url)if err != nil {log.Print(err)}n.Done()}(url)}}n.Wait()}
使用以下命令生成profile记录
go test -bench="Memo_Get" -cpuprofile=cpu.log
此时将生成一个对应的可执行文件和cpu.log
同样也可以分析内存(-memprofile)和阻塞(-blockprofile)情况,但最好不要同时使用,因为会互相影响。
然后使用以下命令进行可视化
go tool pprof -http="127.0.0.1:8000" ./NoneLockCache.test cpu.log
将自动跳转到浏览器打开页面
