性能优化 尝试pprof| 青训营笔记

53 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

老师讲了很多关于讲代码的规范问题,可见写代码的时候规范很重要。

性能方面 主要是使用工具进行测试 测试的原则也是 保证正确性以及更优秀的空间/时间复杂度

其中讲了性能工具pprof

1.pprof是什么?

pprof是go内置的性能调优工具,可以借助一些工具以图形化的方式展示出来某些接口占用cpu资源的详情。   

2.专项用途:

1.cpu

主要测试占用cpu资源比较多的函数或者数据,可以推出当前程序的热点数据

2.内存

主要测试堆内存的使用以及分配情况

3.阻塞

主要测试goroutine的使用情况,分析系统的并发瓶颈

使用方式其中之一:命令行 下面为例子

func readMemStats() {
    // MemStats 描述内存信息的静态变量
    var ms runtime.MemStats
    // 读取某一时刻内存情况的快照
    runtime.ReadMemStats(&ms)
    // alloc占用内存情况、堆空闲情况、堆释放情况
    log.Printf("========> Alloc:%d(bytes) HeapIdle:%d(bytes) HeapReleased:%d(bytes)", ms.Alloc, ms.HeapIdle, ms.HeapReleased)
}

// append的扩容情况
func test() {
    container := make([]int, 8)
    log.Println("========> loop begin .")
    // 追加元素
    for i := 0; i < 32*1000*1000; i++ {
        container = append(container, i)
        if i == 16*1000*1000 {
            readMemStats()
        }
    }
    log.Println("==========> loop end.")
}
func main() {


    log.Println("============> [start].")
// 开始时候的内存占用情况
    readMemStats()
// 调用append时候的情况
    test()
    readMemStats()
    log.Println("============> [force.gc].")
    // 强制开启gc
    runtime.GC()
    log.Println("===========>[Done] .")
    readMemStats()
    go func() {
        for {
            readMemStats()
            time.Sleep(10 * time.Second)
        }
    }()
    time.Sleep(3600 * time.Second)
}


总的来说 这次老师讲的东西很多 而且大部分不是短时间内能够做到的,像写代码的规范啊还有性能的优化,写代码的时候的余地等等 唯一可以短时间学会的也就是这个工具的使用了,不过万事开头难,有方向慢慢进步总是有收获的。

QQ截图20230117193554.png

参考引用: blog.csdn.net/m0_46251547…