• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go程序性能优化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

性能优化总结:

1 尽量避免频繁创建对象,即减少&{},new,make的使用
2 数组可当切片用,当需要使用切片时,可考虑能使用数组来减少切片的创建
3 当某类临时对象被多个协频繁程使用时,可用sync.pool做缓存
4 当某类临时对象被少量协程频繁使用时,可预先创建对象数组来减少零碎对象数量
5 单通道多协程的场景,可尝试多通道均分多协程实现(通道内部使用锁互斥,减少单条通道的协程数量可提高并发效率)
6 当协程数量达到万级,应控制协程数量(协程过多,对gc影响特大 go1.4)
7 由于调度影响,协程可预先创建的尽量预先创建,避免需要时创建,特别是响应延迟要求较低的逻辑

 

性能优化方法:

=======================CPU性能分析方法=========================

方式一:

对象:web程序, 在程序中引入runtime/pprof包,并添加如下代码:

    filename := "cpu_profile"           // 最好是在放在主函数中 test.pprof CPU分析文件

    f, err := os.Create(filename)

    if err != nil {

        fmt.Println(err)

        return

    }   

    pprof.StartCPUProfile(f)

    defer pprof.StopCPUProfile()

    defer f.Close()

使用:终端执行 go tool pprof program_name cpu_profile

 

方式二:

对象:web程序,引入net/http/pprofweb的路由处理为默认处理,若非默认路由,则为其添加如下类似路由处理:

func init() {

    http.Handle("/debug/pprof/", http.HandlerFunc(Index))

    http.Handle("/debug/pprof/cmdline", http.HandlerFunc(Cmdline))

    http.Handle("/debug/pprof/profile", http.HandlerFunc(Profile))

    http.Handle("/debug/pprof/symbol", http.HandlerFunc(Symbol))

}

ps:此段代码为net/http/pprof内代码,为自定义路由处理添加时将函数转换成pprof包的调用即可,如:Index  ==> pprof.Index

使用:浏览器访问上述路径即可,也可用 go tool pprof program_name http:xxx:xx/debug/pprof/profile进入命令行交互模式使用

 

方式三:

对象:应用程序或Test案例(可执行结束的), 进入工作目录使用如下命令:

  Go test -cpuprofile filename net/http    // filename 为自定义文件名,会生成此文件和http.test文件

使用: go tool pprof http.test filename

 

================================GC性能分析方法===========================

设置环境变量:export GODEBUG=gctrace=1      // 具体数据含义百度~~


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
HandwrittenParsers&LexersinGo(翻译)发布时间:2022-07-12
下一篇:
go语言笔记——defer作用DB资源等free或实现调试发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap