美文网首页
go语言开发工具分享

go语言开发工具分享

作者: voidFan | 来源:发表于2020-12-18 14:47 被阅读0次

    一、google的go语言分析诊断工具

    二、go代码调试工具

    GO语言调试利器——dlv

    三、Golang Tool pprof 性能分析工具

    • 使用pprof有2种方式,一种是web网页,一种是go tool pprof命令行交互
    goroutine - 所有goroutine的信息
    heap - 堆内存的信息
    allocs - a sampling of all past memory allocations
    threadcreate - 线程信息
    block - stack traces that led to blocking on synchronization primitives
    mutex - 锁的信息
    goroutine: 获取程序当前所有 goroutine 的堆栈信息。
    heap: 包含每个 goroutine 分配大小,分配堆栈等。每分配 runtime.MemProfileRate(默认为512K) 个字节进行一次数据采样。
    threadcreate: 获取导致创建 OS 线程的 goroutine 堆栈
    block: 获取导致goroutine阻塞的堆栈(如 channel, mutex 等),使用前需要先调用 runtime.SetBlockProfileRate
    mutex: 获取导致 mutex 争用的 goroutine 堆栈,使用前需要先调用 runtime.SetMutexProfileFraction
    

    上面通过浏览器访问http服务的方式,需要有图形界面。而线上服务器通常是没有图形界面的,可以通过命令行方式来分析,或者将profile拷贝到本地,再生成调用关系图

    import _ "net/http/pprof"
    func main() {
        ......
        go func() {
            log.Println(http.ListenAndServe("localhost:8211", nil))
        }()
        ......
    }
    
    • Go Tool PProf 命令行
    go tool pprof http://localhost:8211/debug/pprof/goroutine
    go tool pprof http://localhost:8211/debug/pprof/profile
    go tool pprof http://localhost:8211/debug/pprof/heap
    

    什么是内存泄露

    • 内存泄露指的是程序运行过程中已不再使用的内存,没有被释放掉,导致这些内存无法被使用,直到程序结束这些内存才被释放的问题。
    • Go虽然有GC来回收不再使用的堆内存,减轻了开发人员对内存的管理负担,但这并不意味着Go程序不再有内存泄露问题。在Go程序中,如果没有Go语言的编程思维,也不遵守良好的编程实践,就可能埋下隐患,造成内存泄露问题。

    怎么发现内存泄露

    • 在Go中发现内存泄露有2种方法,一个是通用的监控工具,另一个是go pprof:
    • 监控工具:固定周期对进程的内存占用情况进行采样,数据可视化后,根据内存占用走势(持续上升),很容易发现是否发生内存泄露。
    • go pprof:适合没有监控工具的情况,使用Go提供的pprof工具判断是否发生内存泄露。

    四、golang代码级调优方法

    • 提前预估size, make之临时的map,slice,可采用sync.pool.大于32kb,也可以使用sync.pool
    • 不要滥用time.After, 多用事件通知
    • 不要滥用goroutime, 减少gc压力
    • 不要滥用锁,引起runtime上下文切换
    • 使用unsafe进行转换类型,不要总是[]byte,string转换
    • 减少使用reflect反射使用
    • 减少不必要的defer调用
    • 使用atomic实现无锁逻辑

    五、业务调优

    • 减少网络io的消耗:批量接口、缩减网络调用链
    • 缓存内存化、减少同步逻辑、使用压缩,节省带宽。

    相关文章

      网友评论

          本文标题:go语言开发工具分享

          本文链接:https://www.haomeiwen.com/subject/nfoxnktx.html