美文网首页
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语言开发工具分享

    google的go语言分析诊断工具 centos先安装gops gops —— Go 程序诊断分析工具[https...

  • Go语言实战笔记

    Go语言实战笔记(二)| Go开发工具https://www.flysnow.org/2017/03/08/go-...

  • JetBrains GoLand 2019 for Mac(商业

    JetBrains GoLand 2019 for Mac是Mac平台上的一款Go语言IDE开发工具。GoLand...

  • go语言学习01-基础

    运行Go语言代码、分享Go语言代码的平台https://play.golang.org/[https://play...

  • 课程目录

    初识Go语言 Go语言的特性 环境搭建 分享人:洪波 时间:2019-6-25 17:00-18:00 Go语...

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • 潍坊go语言培训

    潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍...

  • 02-Go语言开发环境搭建-指趣学院

    Go语言SDK安装和配置 什么是SDK软件开发工具包(外语首字母缩写:SDK、外语全称:SoftwareDevel...

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • 小猿圈怎么上之go语言使用第三方包操作示例

    对于go语言你了解多少,以前有过这方面知识的积累吗?小猿圈go语言讲师就给你分享发一些go语言的知识点,希望对你有...

网友评论

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

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