在做内存分析时,用到了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. clipboard实现文本复制的方法

    1.下载地址: https://github.com/mo3408/clipboard 2.使用方法: 先引入js: <script src="dist/clipboard.min.j ...

  2. KingbaseES R6 集群备库网卡down测试案例

    数据库版本: test=# select version(); version ------------------------------------------------------------ ...

  3. LFS(Linux From Scratch)构建过程全记录(六):交叉编译临时工具

    写在前面 本章将展示如何使用刚刚构建的跨工具链来交叉编译基本实用程序. M4安装 和前文一样,先进行解压,然后cd进入 注意:不需要构建build文件夹,直接输入以下配置文件 ./configure ...

  4. elementUI中page(分页)的使用方法

    HTML部分 <!-- 快捷键 page-div --> <el-pagination background layout="sizes,prev, pager, next ...

  5. spring boot http status 400

    SpringBootAdmin不是Spring官方提供的模块,它包含了Client和Server两部分.server部分提供了用户管理界面,client即为被监控的服务.client需要注册到serv ...

  6. 2流高手速成记(之三):SpringBoot整合mybatis/mybatis-plus实现数据持久化

    接上回 上一篇我们简单介绍了基于SpringBoot实现简单的Web开发,本节来看Web开发中必不可少的内容--数据持久化 先看项目结构: 1. 创建数据表 打开mysql,打开数据库 test (没 ...

  7. a除于b

    a=eval(input()) b=eval(input()) if b!=0: print("{}".format(round(a/b,2))) else: print(&quo ...

  8. 报错 Invalid options in vue.config.js: "baseUrl" is not allowed 问题解决

    报错 Invalid options in vue.config.js: "baseUrl" is not allowed vue3.0版本中 执行 npm run build会出 ...

  9. Springboot 之 Filter 实现超大响应 JSON 数据压缩

    简介 项目中,请求时发送超大 json 数据外:响应时也有可能返回超大 json数据.上一篇实现了请求数据的 gzip 压缩.本篇通过 filter 实现对响应 json 数据的压缩. 先了解一下以下 ...

  10. Linux-->文件目录作用查询

    Linux的目录结构 在Linux中他的根目录都是决定好的无法改名,并且每一个目录他的作用都是决定好的 在Linux中一切都是文件!,Linux会把所有的硬件都映射成文件 / 代表根目录 /bin / ...