需要可视化工具graphviz
    这里使用了之前的无锁并发缓存做示例无锁并发缓存实现
    main()函数单独放到test文件中
    // cache_test.go

    1. package NoneLockCache
    2. import (
    3. "log"
    4. "sync"
    5. "testing"
    6. )
    7. func BenchmarkMemo_Get(b *testing.B) {
    8. urls := []string{
    9. "http://www.baidu.com",
    10. "http://www.163.com",
    11. "http://www.qq.com",
    12. "http://www.baidu.com",
    13. "http://www.baidu.com",
    14. "http://www.163.com",
    15. "http://www.qq.com",
    16. "http://stackoverflow.com",
    17. "http://stackoverflow.com",
    18. }
    19. m := New(httpGetBody)
    20. var n sync.WaitGroup
    21. for i := 0; i < b.N; i++ {
    22. for _, url := range urls {
    23. n.Add(1)
    24. go func(url string) {
    25. _, err := m.Get(url)
    26. if err != nil {
    27. log.Print(err)
    28. }
    29. n.Done()
    30. }(url)
    31. }
    32. }
    33. n.Wait()
    34. }

    使用以下命令生成profile记录

    1. go test -bench="Memo_Get" -cpuprofile=cpu.log

    此时将生成一个对应的可执行文件和cpu.log
    同样也可以分析内存(-memprofile)和阻塞(-blockprofile)情况,但最好不要同时使用,因为会互相影响。
    截屏2021-12-24 16.35.53.png
    然后使用以下命令进行可视化

    1. go tool pprof -http="127.0.0.1:8000" ./NoneLockCache.test cpu.log

    将自动跳转到浏览器打开页面