文章目录

    • 前言
  • 采集方式
    • 命令模式
    • 调度图
  • 监控方式
  • go-torch方法
    • FlameGraph工具
    • wrk压测工具(go-wrk)
    • go-torch使用
  • Metricbeat 监控
  • 自定义方法

前言

golang作为一门高效的语言,性能监控和调试非常重要,如何进行性能监控和分析是优化的关键。

Go语言项目中的性能优化主要有以下几个方面:

  • CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据
  • Memory Profile(Heap Profile):报告程序的内存使用情况
  • Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈
  • Goroutine Profiling:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的

go语言提供包

  • runtime/pprof:采集工具型应用运行数据进行分析
  • net/http/pprof:采集服务型应用运行时数据进行分析

采集方式

pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取格格函数占用的CPU以及内存资源;最后通过对这些采样数据进行分析,形成一个性能分析报告。
引入包

import "runtime/pprof"

使用方法

pprof.StartCPUProfile(w io.Writer) //开启,向一个io中写入cpu信息
pprof.WriteHeapProfile(w io.Writer) //向一个io中写入内存信息
pprof.StopCPUProfile() //停止,写入完成

命令模式

将数据写入到文件中
通过 go tool pprof [文件名] 命令查看使用

我们可以在交互界面输入top3来查看程序中占用CPU前3位的函数:

其中:

  • flat:当前函数占用CPU的耗时
  • flat%:当前函数占用CPU的耗时百分比
  • sun%:函数占用CPU的耗时累计百分比
  • cum:当前函数加上调用当前函数的函数占用CPU的总耗时
  • cum%:当前函数加上调用当前函数的函数占用CPU的总耗时百分比
  • 最后一列:函数名称

也可以通过list 函数名查看函数的信息

通过分析发现大部分CPU资源被26行占用

调度图

输入web在网页中查看调度图,输入pdf生成一个pdf文件
需要安装工具graphviz

关于图形的说明: 每个框代表一个函数,理论上框的越大表示占用的CPU资源越多。 方框之间的线条代表函数之间的调用关系。 线条上的数字表示函数调用的次数。 方框中的第一行数字表示当前函数占用CPU的百分比,第二行数字表示当前函数累计占用CPU的百分比。

go tool pprof默认是使用-inuse_space进行统计,还可以使用-inuse-objects查看分配对象的数量。

监控方式

如果你的应用程序是一直运行的,比如 web 应用,那么可以使用net/http/pprof库,它能够在提供 HTTP 服务进行分析。

如果使用了默认的http.DefaultServeMux(通常是代码直接使用 http.ListenAndServe(“0.0.0.0:8000”, nil)),只需要在你的web server端代码中按如下方式导入net/http/pprof

import _ "net/http/pprof"

如果你使用自定义的 Mux,则需要手动注册一些路由规则:

r.HandleFunc("/debug/pprof/", pprof.Index)
r.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
r.HandleFunc("/debug/pprof/profile", pprof.Profile)
r.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
r.HandleFunc("/debug/pprof/trace", pprof.Trace)

如果你使用的是gin框架,那么推荐使用"github.com/DeanThompson/ginpprof"。

不管哪种方式,你的 HTTP 服务都会多出/debug/pprof endpoint,访问它会得到类似下面的内容:

这个路径下还有几个子页面:

  • /debug/pprof/profile:访问这个链接会自动进行 CPU profiling,持续 30s,并生成一个文件供下载
  • /debug/pprof/heap: Memory Profiling 的路径,访问这个链接会得到一个内存 Profiling 结果的文件
  • /debug/pprof/block:block Profiling 的路径
  • /debug/pprof/goroutines:运行的 goroutines 列表,以及调用关系

go-torch方法

火焰图(Flame Graph)是 Bredan Gregg 创建的一种性能分析图表,因为它的样子近似

Go程序性能分析方法(一文全解)相关推荐

  1. 卷积为什么如此强大?一文全解深度学习中的卷积

    卷积为什么如此强大?一文全解深度学习中的卷积 2018年05月10日 15:52:41 七月在线实验室 阅读数:17112 作者:Tim Dettmers(Understanding Convolut ...

  2. CSS3阴影实现方法及技巧全解

    CSS3阴影实现方法及技巧全解 网页设计中常常要用到阴影的效果,通过阴影可以比较容易突出一个元素,在没有CSS3的时候,一般都用图片做阴影效果,而现在通过使用CSS3的text-shadow和box- ...

  3. 一文全解高级网格划分工具Fluent Meshing

    作者 | 张杨 仿真秀专栏作者 ANSYS Fluent Meshing 是一款高级流体仿真前处理工具,具备从几何到求解的完整工作流程.其前身是Tgrid非结构体网格生成工具,并在最近的几个版本新增了 ...

  4. 【含泪提速!】一文全解相似度算法、跟踪算法在各个AI场景的应用(附代码)

    大家好,我是cv君,大家是否为深度学习算法速度感到困扰?本次cv君倾力分享一个优秀的方法,通过相似度+跟踪方案优化速度问题,并提高了检测.分割算法稳定性,附带代码,一起肝起来吧~ 今天给大家全解一下图 ...

  5. 干货|一文全解深度学习中的卷积

    来源:1024深度学习 概要:卷积现在可能是深度学习中最重要的概念.正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段. 译自Tim Dettmers的Understanding ...

  6. 点击部分刷新html ajax,一文全解web前端精简知识点

    Web 前端知识体系精简介绍,让你学web前端轻松容易,让你选择web前端更轻松容易! Never give up on something you really want. It's difficu ...

  7. 02:一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

    标签(空格分隔): 王小草Tensorflow笔记 笔记整理者:王小草 笔记整理时间2017年2月24日 Tensorflow官方英文文档地址:https://www.tensorflow.org/g ...

  8. 抖音怎么在电脑上看_抖音电脑直播权限怎么开通?抖音直播伴侣怎么操作?一文全解...

    我们都知道,在这个全民直播的时代,只需要一部手机就能随时随地开直播. 然而很多人在直播时都会遇到这样的问题: 手机直播画面不清晰:网速不给力,直播间人一多就卡出马赛克:手机硬件不够好,声音画面不同步. ...

  9. 技术博客丨原来模型训练可以不用标注?一文全解四大机器学习方法

    作者:Ta-Ying Cheng,牛津大学博士研究生,Medium技术博主,多篇文章均被平台官方刊物Towards Data Science收录 即使在人工智能已经逐渐普遍的今天,有许多人对机器学习相 ...

最新文章

  1. 『Python基础-11』集合 (set)
  2. Unigui 服务器解析php,如何正确使用uniGUI的HyperServer(负载均衡)功能
  3. Git使用方法——原创
  4. python—多线程之共享数据
  5. python 命名管道_Python:检查命名管道是否有数据
  6. CodeIgniter模型
  7. java学习(78):GUL拆分窗口
  8. mybatis3 oracle,Mybatis3中對oracle的批量插入
  9. 网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array...
  10. 利用NABCD模型进行竞争性需求分析
  11. Mysql中的日期及时间相关函数
  12. 099 元类( 控制对象产生和控制类产生)模板
  13. 郑中基 英雄寞 08版射雕英雄传片头曲 LRC歌词
  14. Word 远程调用失败:异常来自 HRESULT:0x800706BE
  15. 推荐一款微信小程序《诗词万卷》
  16. Windows常见的几种权限维持
  17. 物理综合 | congestion 报告解读
  18. QDialog无边框
  19. 7月,带你阅读图灵原创图书以及上榜新书
  20. 求大神解答!!!!在线死等!

热门文章

  1. linux下md5加密(使用openssl库C实现)
  2. 用matlab实现割线法求根
  3. 【HaaS Python 硬件积木】粉尘传感器
  4. 使用云服务器搭建个人简历网页
  5. 面试阿里技术专家岗,对答如流,这些面试题你能答出多少
  6. 零基础驯养一头程序猿:从入门到结婚(上)
  7. 荣耀v20会升级到Android10吗,荣耀v20该不该升级到emui10?有什么样的优势?
  8. 亚马逊推荐系统算法详解/贪心学院
  9. turbo intruder常用脚本
  10. 华为FreeBuds 3无线耳机观感体验——外形,舒适度,配置