Go oom分析(二)——导出dump离线分析

在 Go 程序中导出内存或 CPU 的 dump 文件(通常通过 pprof 工具生成)并进行分析,以下是详细步骤:

1. 在程序中开启 pprof

在你的 Go 程序中引入 net/http/pprof,开启 pprof 服务:

import (
    _ "net/http/pprof"
    "log"
    "net/http"
)

func init() {
    go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil))
    }()
}

这样会在 localhost:6060 开启一个 HTTP 服务器,提供调试接口。

2. 导出 Dump 文件

通过访问 pprof 提供的接口,可以导出 CPU、堆内存、Goroutines 等的 dump 文件。

(1)CPU Profile

捕获一段时间的 CPU 使用数据:

curl http://localhost:6060/debug/pprof/profile?seconds=30 -o cpu.prof

默认采样时间是 30 秒,可调整 seconds 参数。

2)Heap (内存分配)

导出当前堆内存分配情况:

curl http://localhost:6060/debug/pprof/heap -o heap.prof

3)Goroutines

导出当前所有 Goroutines 的状态:

curl http://localhost:6060/debug/pprof/goroutine -o goroutine.prof

(4)其他

  • Block(阻塞分析)

curl http://localhost:6060/debug/pprof/block -o block.prof

注意:需要在程序中开启阻塞分析:

import "runtime"
func init() {
    runtime.SetBlockProfileRate(1)
}

Mutex(锁分析)

curl http://localhost:6060/debug/pprof/mutex -o mutex.prof

注意:需要开启锁分析:

import "runtime"
func init() {
    runtime.SetMutexProfileFraction(1)
}

3. 分析 Dump 文件

导出的 .prof 文件可以用以下工具分析:

(1)使用 go tool pprof

运行以下命令:

go tool pprof <binary> <dump_file>

例如:

go tool pprof ./your_app cpu.prof

在交互界面中,常用命令:

  • top:显示占用资源最多的函数。
  • list <function>:查看某个函数的详细实现。
  • web:生成调用图(需要 Graphviz 支持)。

如果是远程服务:

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

(2)使用火焰图

.prof 转为火焰图形式,更直观:

  • 安装 FlameGraph 工具。
  • 导出火焰图:
go tool pprof -svg <binary> <dump_file> > profile.svg
  • 打开生成的 profile.svg 进行查看。

4. 在线分析工具

你也可以将 dump 文件上传到在线分析工具(如 pprof.me)中进行图形化展示。

5. 浏览器分析

go tool pprof -http=0.0.0.0:8080 ./your_app heap.prof

5. 示例操作

假设运行一个 Go 应用:

./your_app

程序运行中出现内存占用异常,通过以下步骤排查:

  • 导出当前堆内存:
curl http://localhost:6060/debug/pprof/heap -o heap.prof
  • 分析 dump 文件:
go tool pprof ./your_app heap.prof
  1. 在交互界面中查看:
    • top:检查内存占用最大的函数。
    • web:生成调用图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/952317.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Swagger学习⑰——@Link注解

介绍 Link 是 Swagger/OpenAPI 3.0 注解库中的一个注解&#xff0c;用于在 OpenAPI 文档中定义链接&#xff08;Link&#xff09;。链接是一种在 API 响应中提供相关操作或资源引用的机制&#xff0c;通常用于描述操作之间的关系或提供额外的操作提示。 Link 注解的作用 Link…

TIOBE编程语言排行靠前的编程语言的吉祥物

Python的吉祥物&#xff1a;小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"&#xff08;或简称"Py"&#xff09;的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年&#xff0c;它的形象借鉴了真实的蟒蛇&#xff0c;但加入了一些可爱和友善的特点。小蟒蛇…

浙江安吉成新的分布式光伏发电项目应用

摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活的布局、更低的建设成本和更高…

记录一次Android Studio的下载、安装、配置

目录 一、下载和安装 Android Studio 1、搜索下载Android studio ​2、下载成功后点击安装包进行安装&#xff1a; 3、这里不用打勾&#xff0c;直接点击安装 &#xff1a; 4、完成安装&#xff1a; 5、这里点击Cancel就可以了 6、接下来 7、点击自定义安装&#xff1a…

【面试】程序员 简历

一、简历整体结构 完整简历包含基本信息、教育背景、求职意向、工作经历、职业技能、项目经历、个人优势和个人荣誉八个部分。编写时&#xff0c;前几部分在保证真实的基础上可适当美化&#xff1b;个人优势和荣誉描述要突出难点亮点且避免夸张&#xff0c;可写入如马拉松参赛、…

于交错的路径间:分支结构与逻辑判断的思维协奏

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节内容很多&#xff0c;文章字数达到了史无前例的一万一&#xff0c;我们要来学习分支与循环结构中…

CentOS 7 下 Nginx 的详细安装与配置

1、安装方式 1.1、通过编译方式安装 下载Nginx1.16.1的安装包 https://nginx.org/download/nginx-1.16.1.tar.gz 下载后上传至/home目录下。 1.2、通过yum方式安装 这种方式安装更简单。 2、通过编译源码包安装Nginx 2.1、安装必要依赖 sudo yum -y install gcc gcc-c sudo…

ubuntu/kali安装c-jwt-cracker

1.下载安装包 可以去GitHub下载解压&#xff0c;我这直接在kali克隆下来了。&#xff08;网络不好可能克隆不下来&#xff09; git clone https://github.com/brendan-rius/c-jwt-cracker.git 2.如果下载的压缩包就需要进行解压&#xff0c;克隆的直接进入目录就好了。 unzi…

深入解析 Flink 与 Spark 的性能差异

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

1.1 k8s的介绍与核心对象概念

本节重点总结&#xff1a; k8s主要功能k8s核心对象 PodVolumeServiceDeploymentDaemonSetStatefulSetJob k8s架构 master和node节点master节点node节点 Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统&#xff0c;使用Go语言开发Kubernetes也叫K8S(因…

MySQL库表的操作

目录 一、库的操作 1.1库的创建 1.2字符集和校验规则 1.2.1 查看系统默认字符集以及校验规则 1.2.2 查看数据库支持的字符集 1.2.3 查看数据库支持的字符集校验规则 1.2.4 校验规则对数据库的影响 1.3操纵数据库 1.3.1显示库 1.3.2显示创建语句 1.3.3修改数据库 1.3…

详解opencv resize之INTER_LINEAR和INTER_AREA

一。先简单介绍一下resize的用法 src&#xff1a;输入图&#xff0c; dst&#xff1a;输出图 dsize&#xff1a;输出图的宽高&#xff0c;如果dsize不为空&#xff08;即宽高都不是0&#xff09;&#xff0c;则以dsize为准进行resize。 fx, fy是放大缩小的比例&#xff0c;是…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题&#xff0c;通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索&#xff0c;多选功能&#xff0c;多选搜索功能&#xff0c;自定义 下拉框插件&#xff0c;使用这个的原因是因为 uniui uview 组件库下拉框太…

我喜欢的数学题

偏向抖机灵性质的&#xff0c;考察理解的&#xff0c;而不是比拼计算量的&#xff0c;可能跟现在岁数大了算不明白了多少有点关系吧。 高高手&#xff0c;别太重计算&#xff0c;给普通孩子留条路。就算将来真的理工治国&#xff0c;也没必要都往人形计算机方面引导。毕竟你未来…

潜力巨大但道路曲折的量子计算

近一年来&#xff0c;由于工作的原因参观访问了一些量子产业园&#xff0c;接触了量子加密计算机、量子云计算等非常炫酷的概念性产品&#xff0c;这与自己一直认为的“量子技术仍然处于实验室研究阶段”的基本判断与认知产生了强烈的冲突&#xff0c;一刹那间&#xff0c;心中…

电脑提示directx错误导致玩不了游戏怎么办?dx出错的解决方法

想必大家都有过这样的崩溃瞬间&#xff1a;满心欢喜打开心仪的游戏&#xff0c;准备在虚拟世界里大杀四方或者畅游冒险&#xff0c;结果屏幕上突然弹出个 DirectX 错误的提示框&#xff0c;紧接着游戏闪退&#xff0c;一切美好戛然而止。DirectX 作为 Windows 系统下游戏运行的…

设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析

状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为&#xff0c;使得对象看起来好像修改了它的类。这种设计模式的核心思想是将对象的状态和行为封装成不同的状态类&#xff0c;通过状态对象的行为改变来避免…

Win11系统安装以及Java环境、Python环境配置、简单项目

1.Win11系统安装 (1)进入官方 在Edge浏览器中输入Win11下载&#xff0c;找到对应官方网站 官方网站链接&#xff1a;下载 Windows 11 (2)挑选下载方法 目录 1.Win11系统安装 (1)进入官方 (2)挑选下载方法 2.下载并配置Java环境 &#xff08;1&#xff09;版本选择 &a…

net-http-transport 引发的句柄数(协程)泄漏问题

Reference 关于 Golang 中 http.Response.Body 未读取导致连接复用问题的一点研究https://manishrjain.com/must-close-golang-http-responsehttps://www.reddit.com/r/golang/comments/13fphyz/til_go_response_body_must_be_closed_even_if_you/?rdt35002https://medium.co…

西电-神经网络基础与应用-复习笔记

此为24年秋研究生课程复习笔记 导论 神经网络的研究方法分为 连接主义&#xff0c;生理学派&#xff0c;模拟神经计算。高度的并行、分布性&#xff0c;很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。符号主义&#xff0c;心理学派&#xff0c;基于符号…