在做内存分析时,用到了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

go工具pprof部署的更多相关文章

  1. Docker 管理工具 Portainer部署

    Docker 管理工具 Portainer部署 一.官网 官网:http://www.portainer.io 演示地址:http://demo.portainer.io 用户名:admin 密码:t ...

  2. 使用Ubuntu系统管理包工具(apt)部署Zabbix企业级监控系统

    使用Ubuntu系统管理包工具(apt)部署Zabbix企业级监控系统  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Ubuntu系统部署笔记:https://www.cnblo ...

  3. golang 性能调优分析工具 pprof(下)

    golang 性能调优分析工具 pprof(上)篇, 这是下篇. 四.net/http/pprof 4.1 代码例子 1 go version go1.13.9 把上面的程序例子稍微改动下,命名为 d ...

  4. Facebook 网络模拟工具 ATC部署及使用

    废话引用: Facebook此前开源了增强网络流量控制工具 ATC,能利用WiFi网络模拟各种移动网络,测试智能手机和APP在不同国家地区和应用环境下的性能表现.ATC能够模拟2G.2.5G(Edge ...

  5. 使用autotools系列工具自动部署源代码编译安装

    在Linux系统下开发一个较大的项目,完全手动建立Makefile是一件费力而又容易出错的工作.autotools系列工具只需用户输入简单的目标文件.依赖文件.文件目录等就可以比较轻松地生成Makef ...

  6. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  7. Docker管理工具 - Swarm部署记录

    之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...

  8. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  9. 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器

    最近看到阿里云发布了一款名为 Alibaba Cloud Toolkit 的插件,可以帮助开发者高效开发并部署适合在云端运行的应用,瞬间击中了我的小心脏,这个对于个人开发者来说超级棒啊,终于不需要再手 ...

  10. linux-centos下持续集成工具jenkins部署使用教程

    centos下准备工作: 1.安装jdk环境 2.安装maven环境(用于构建项目) 3.git客户端(用于拉取源码) 此外码云还要准备一份java源码(springboot项目) 一.安装jenki ...

随机推荐

  1. 第五章 部署master主控节点

    一.部署etcd集群 1.1 集群规划 主机名 角色 IP hdss7-12 leader 10.4.7.12 hdss7-21 follow 10.4.7.21 hdss7-22 follow 10 ...

  2. KingbaseES 表空间加密-透明加密

    透明存储加密是指数据在写到磁盘上时对其进行加密,当授权用户重新读取数据时再对其进行解密.加密解密过程对用户都是透明的,无需对应用程序进行修改,授权用户甚至不会注意到数据已经在存储介质上加密.当前的透明 ...

  3. 第六章:Django 综合篇 - 15:Django与缓存

    我们都知道Django建立的是动态网站,正常情况下,每次请求过来都经历了这样一个过程: 接收请求 -> url路由 -> 视图处理 -> 数据库读写 -> 视图处理 -> ...

  4. 使用 openssl 生成 https 证书, 并在 nginx 中配置 https

    创建一个私钥 openssl genrsa -des3 -out server.key 2048 注意:这一步需要输入私钥,否则会提示:You must type in 4 to 1023 chara ...

  5. Elasticsearch 趋势科技实战分享笔记

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484113&idx=1&sn=6c40d7f ...

  6. Elasticsearch集群黄色原因的终极探秘

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484125&idx=1&sn=18274d6 ...

  7. prometheus设置使用密码nginx反向代理访问

    注意: 1.设置访问密码的方式 2.ngixn反向代理的配置 # 安装 Apache工具包 apt install apache2-utils htpasswd -bc /etc/nginx/.pro ...

  8. 常量的定义(const和#define)

    定义常量的方法 //均要在调用前(区别全局变量!!) 1.使用#define预处理器 2.使用const关键字 1.#define #define 常量名 常量值 //定义形式,常量名不可以是数字开头 ...

  9. Pyhton实践项目之(一)五子棋人机对战

    1 """五子棋之人机对战""" 2 3 import random 4 import sys 5 6 import pygame 7 im ...

  10. VideoPipe可视化视频结构化框架开源了!

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...