• go工具pprof部署


    在做内存分析时,用到了pprof,这里做一下部署介绍和入门级别的使用。

    pprof是golang的性能工具,有两种交互方式:命令行交互和web交互,同时还支持性能分析数据的图形化展示。

     

    部署pprof:

           在我们的kubeedge代码的edgecore.go里,import导入两个包,再加入访问pprof数据的http server并用goroutine启用。端口号无特殊要求,只要未被占用就行:

    编译出包,netstat –anp | grep 6060查看到端口占用情况。

     

    访问pprof数据:

    1、打开浏览器访问http://ip:port/debug/pprof,可以看到如下的界面:

     

    2、Pprof数据还可用命令行工具进行访问分析:

    确保环境上安装了go,使用如下命令显示heap数据:

    go tool pprof http://127.0.0.1:6060/debug/pprof/heap

    然后可以输入top10,top20 –cum等命令来分析内存占用情况。

    在命令行中可以加入–inuse_space,-alloc_space等参数,分别表示“当前使用的”和”已分配的”。

    top下的参数(查看的是内存信息的话,单位就是内存占用量和百分比;查看的是CPU信息的话,单位就是时间):

    (1)    flat: 占用的内存量

    (2)    flat%: 内存占使用中内存总量的百分比

    (3)    sum%: 前面每一行flat%的和

    (4)    cum:累积量,如果当前函数调用了另一个函数,另一个函数占用的内存也会被计算

    (5)    cum%: 累积量占总量的百分比

     

    分析goroutine泄漏:

    在分析内存的时候,常见的内存泄漏可能是goroutine导致的,比如某个goroutine中有channel阻塞,导致goroutine回收不了,总之就是goroutine没有按照预期退出,而是程序结束时才退出。

    定位goroutine泄漏,可以再web上点开goroutine,点开默认是debug=1:

    Url请求中设置debug=2:

     

    以上是一些我在定位过程中使用到的,pprof还有很多命令可供使用,还支持图形界面的访问,能自动绘制出内存的使用情况包括函数的调用关系,但是我在尝试的时候一直没有成功,感兴趣的可以试一下。

    推荐两篇关于pprof定位内存泄漏问题的文章:

    https://www.cnblogs.com/sunsky303/p/11077030.html

    https://lrita.github.io/2017/05/26/golang-memory-pprof

  • 相关阅读:
    java web 开发入门
    程序优质网站
    为什么要放弃ssh框架
    JDK核心源码(2)
    Linux 格式化分区 报错Could not stat --- No such file or directory 和 partprobe 命令
    快照COW
    磁盘检测SMART工具
    python学习-3.一些常用模块用法
    python 学习2:生成器,迭代器,装饰器
    关于对SwfUpload的改造
  • 原文地址:https://www.cnblogs.com/gongxianjin/p/16406390.html
Copyright © 2020-2023  润新知