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
go工具pprof部署的更多相关文章
- Docker 管理工具 Portainer部署
Docker 管理工具 Portainer部署 一.官网 官网:http://www.portainer.io 演示地址:http://demo.portainer.io 用户名:admin 密码:t ...
- 使用Ubuntu系统管理包工具(apt)部署Zabbix企业级监控系统
使用Ubuntu系统管理包工具(apt)部署Zabbix企业级监控系统 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Ubuntu系统部署笔记:https://www.cnblo ...
- golang 性能调优分析工具 pprof(下)
golang 性能调优分析工具 pprof(上)篇, 这是下篇. 四.net/http/pprof 4.1 代码例子 1 go version go1.13.9 把上面的程序例子稍微改动下,命名为 d ...
- Facebook 网络模拟工具 ATC部署及使用
废话引用: Facebook此前开源了增强网络流量控制工具 ATC,能利用WiFi网络模拟各种移动网络,测试智能手机和APP在不同国家地区和应用环境下的性能表现.ATC能够模拟2G.2.5G(Edge ...
- 使用autotools系列工具自动部署源代码编译安装
在Linux系统下开发一个较大的项目,完全手动建立Makefile是一件费力而又容易出错的工作.autotools系列工具只需用户输入简单的目标文件.依赖文件.文件目录等就可以比较轻松地生成Makef ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- Docker管理工具 - Swarm部署记录
之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...
- Python自动化运维工具-Fabric部署及使用总结
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器
最近看到阿里云发布了一款名为 Alibaba Cloud Toolkit 的插件,可以帮助开发者高效开发并部署适合在云端运行的应用,瞬间击中了我的小心脏,这个对于个人开发者来说超级棒啊,终于不需要再手 ...
- linux-centos下持续集成工具jenkins部署使用教程
centos下准备工作: 1.安装jdk环境 2.安装maven环境(用于构建项目) 3.git客户端(用于拉取源码) 此外码云还要准备一份java源码(springboot项目) 一.安装jenki ...
随机推荐
- Html飞机大战(六):移动飞机
好家伙,这篇移动主角 我们先来看看一个好东西, addEventListener() 方法 (他真的很好用) 我们直译一下,就叫他添加事件监听器方法 而可监听的对象就有很多啦 我们来了解一 ...
- kubernetes之基于ServiceAccount拉取私有镜像
前面可以通过ImagPullPolicy和ImageullSecrets指定下载镜像的策略,ServiceAccount也可以基于spec.imagePullSecret字段附带一个由下载镜像专用的S ...
- 系统无法启动inaccessible boot device
近日有一台Windows 2016遇到了系统无法启动的问题,出现错误inaccessible boot device.发现系统可以进入故障恢复模式,看来问题还不大.因为进入故障恢复模式的时候自动识别的 ...
- G&GH01 注册/安装/设置
注意事项与声明 平台: Windows 10 作者: JamesNULLiu 邮箱: jamesnulliu@outlook.com 博客: https://www.cnblogs.com/james ...
- 第一个HTML
第一个HTML <!DOCTYPE html><!--html 文件开始--><html lang="en"><!--head 文件头-- ...
- kibana配置文件kibana.yml参数详解
server.port: 默认值: 5601 Kibana 由后端服务器提供服务,该配置指定使用的端口号. server.host: 默认值: "localhost" 指定后端服务 ...
- 在 WPF 中实现融合效果
1. 融合效果 融合效果是指对两个接近的元素进行高斯模糊后再提高对比度,使它们看上去"粘"在一起.在之前的一篇文章中,我使用 Win2D 实现了融合效果,效果如下: 不过 Win2 ...
- C++面向对象编程之类的写法
1.头文件中的防卫式声明 例如自己要建复数complex类,可以建立一个complex.h的头文件. 头文件中必须先写防卫式声明: #ifndef __COMPLEX__ #define __COMP ...
- CentOS 7.9 安装 kafka_2.13
一.CentOS 7.9 安装 kafka_2.13 地址 https://kafka.apache.org/downloads.html 二.安装准备 1 安装JDK 在安装kafka之前必须先安装 ...
- 14.MongoDB系列之配置分片
1. 启动服务器 1.1 启动配置服务器 配置服务器是集群的大脑,保存着关于每个服务器包含哪些数据的所有元数据,因此,必须首先创建配置服务器. 由于资源限制,在同一机器上启动三个进程 # mkdir ...