当前位置: 首页 > news >正文

【Golang】火焰图空白部分是什么?

起因

被同事灵魂拷问:图中这块空白是什么东西?
在这里插入图片描述

豆包回答说是数据采样不完整,特定函数或代码段未被调用之类的原因,感觉都不太合理。
之前看过一篇文章说:Heap Profiling的采样是无时无刻不在发生的,执行一次profiling仅仅是dump一下迄今为止的数据快照。这篇文章更加推翻了前面"数据采样不完整"的假设。那火焰图中的空白到底是啥,我们亲自试一下。

实验

参考:使用火焰图对 Go 程序进行性能分析

实验设计

在一个函数中调用另外的函数,在多种位置申请内存,查看火焰图的空白情况。

前置准备

  1. 安装环境
  2. 编写测试代码
  3. 在Goland中运行测试代码,可以通过 pprof 的 HTTP 接口访问http://localhost:8000/debug/pprof/heap?debug=1
  4. 在终端中执行以下命令,在页面中展示火焰图。其中,-http=":8081"表示用于查看火焰图的端口,http://localhost:8000/debug/pprof/heap表示采集的数据源。需要注意,每次运行此命令时,生成的是当前堆快照,如果代码有变更,或者想要获取最新结果,需要中断后重新运行此命令。
    go tool pprof -http=":8081" http://localhost:8000/debug/pprof/heap
  5. 火焰图分析方法:选择VIEW - Flame Graph (old)后,再选择SAMPLE - alloc_space。我们主要看这个,其它的选项也可以参考。
    在这里插入图片描述

函数调用关系

func allocate1() {allocate2()allocate3()
}

代码1:allocate1本身占用空间

package mainimport ("net/http"_ "net/http/pprof""time"
)func allocate1() {var s []stringfor i := 0; i < 10000; i++ {// allocate1占用的空间for i := 0; i < 10; i++ {s = append(s, "This is a sample string")}// allocate2占用的空间allocate2()// allocate3占用的空间allocate3()}
}func allocate2() {var s []stringfor i := 0; i < 10; i++ {s = append(s, "This is a sample string")}
}
func allocate3() {var s []stringfor i := 0; i < 10; i++ {s = append(s, "This is a sample string")}
}func main() {go func() {for {allocate1()time.Sleep(1 * time.Second)}}()http.ListenAndServe(":8000", nil)
}

生成的火焰图:
在这里插入图片描述

代码2:allocate本身不占空间

把13-15行注释掉,让allocate1不占空间

package mainimport ("net/http"_ "net/http/pprof""time"
)func allocate1() {//var s []stringfor i := 0; i < 10000; i++ {// allocate1占用的空间//for i := 0; i < 10; i++ {// s = append(s, "This is a sample string")//}// allocate2占用的空间allocate2()// allocate3占用的空间allocate3()}
}func allocate2() {var s []stringfor i := 0; i < 10; i++ {s = append(s, "This is a sample string")}
}
func allocate3() {var s []stringfor i := 0; i < 10; i++ {s = append(s, "This is a sample string")}
}func main() {go func() {for {allocate1()time.Sleep(1 * time.Second)}}()http.ListenAndServe(":8000", nil)
}

生成的火焰图:
在这里插入图片描述

结论

当allocate1本身占用空间的时候,火焰图中的空白存在。当allocate1本身不占用空间的时候,火焰图被填满,不存在空白。说明空白的部分是上一级函数内部对象占用的空间。

相关文章:

【Golang】火焰图空白部分是什么?

起因 被同事灵魂拷问&#xff1a;图中这块空白是什么东西&#xff1f; 豆包回答说是数据采样不完整&#xff0c;特定函数或代码段未被调用之类的原因&#xff0c;感觉都不太合理。 之前看过一篇文章说&#xff1a;Heap Profiling的采样是无时无刻不在发生的&#xff0c;执行…...

Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader]

Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader] [FromBody][FromQuery][FromRoute] or [FromUri][FromHeader] [FromBody] FromBody 属性在使用 application/json 内容类型并在正文中传递 JSON 时使用通常情况下&#xff0c;FromBody 在一个操作中只…...

Messari 摘要报告:Covalent Network(CXT)2024 Q2 品牌重塑、AI模块化数据、亚太地区扩展、代币回购计划和网络增长

摘要 Covalent Network&#xff08;CXT&#xff09;在将质押从 Moonbeam 迁移到以太坊后&#xff0c;质押的 CQT 百分比恢复到了 20% 以上。 Covalent Network&#xff08;CXT&#xff09;在第二季度新增了五个网络运营商&#xff0c;使 BSP 集增长了 36%&#xff0c;提升了协…...

Open3D 计算点云的面状指数

目录 一、概述 1.1原理 1.2实现步骤 步骤 1&#xff1a;确定邻域点 步骤 2&#xff1a;计算协方差矩阵 步骤 3&#xff1a;特征值分解 步骤 4&#xff1a;计算面状指数 步骤 5&#xff1a;可视化与应用 1.3应用领域 二、代码实现 2.1关键函数 2.2完整代码 三、实现…...

python下麦克风设备选择和录音

import pyaudio import threading import wave import numpy as np def audio_f2i(data, width16):"""将浮点数音频数据转换为整数音频数据。"""data np.array(data)return np.int16(data * (2 ** (width - 1)))def audio_i2f(data, width16)…...

云和集群有什么区别?

我们常说的集群是针对于某项单独的功能或者说是某几个功能的集合体。 举个例子&#xff0c;比方有100台机器组成一个集群&#xff0c;这个集群里面50台机器装了hadoop&#xff0c;10台机器装了spark&#xff0c;剩下40台机器再装一个查询引擎presto。诸如此类&#xff0c;把多…...

无人机视角下的EasyCVR视频汇聚管理:构建全方位、智能化的AI视频监控网络

随着5G、AI、物联网&#xff08;IoT&#xff09;等技术的快速发展&#xff0c;万物互联的时代已经到来&#xff0c;视频技术作为信息传输和交互的重要手段&#xff0c;在多个领域展现出了巨大的应用潜力和价值。其中&#xff0c;EasyCVR视频汇聚平台与无人机结合的AI应用更是为…...

数字影像技术是如何改变我们看待世界的方式呢?

在当今的科技时代&#xff0c;数字影像技术正以惊人的速度改变着我们的生活和视觉体验。那么&#xff0c;什么是数字影像技术呢&#xff1f; 数字影像技术是指通过数字化手段对图像和视频进行获取、处理、存储、传输和展示的一系列技术。 它利用各种数字设备&#xff0c;如数…...

Chainlit实现启动页面选择不同的LLM启动器等设置界面

基本概念&#xff1a;启动选择器&#xff08;Starters&#xff09; 启动选择器&#xff08;Starters&#xff09; 是一种帮助用户开始与您的助手互动的建议。您可以为助手定义最多4个启动建议&#xff0c;并且可以为每个启动建议指定一个图标。 示例代码 (starters.py) impo…...

SQL - 增、改、删

插入 (insert into) 插入单行 insert into 表名 values ( 对应列的值&#xff0c;用,号间隔) //一般主键值用default&#xff0c;不可填null的不要填null insert into 表名 (需要提供值的列名) values (与之对应的提供的值) //其他的值只需mysql默认提供 insert into 表名 子查…...

怎么屏蔽电脑监控软件?企业管理者的智慧选择——精准定位,合理屏蔽,让监控软件成为助力而非障碍!

电脑监控软件在企业管理中扮演着日益重要的角色&#xff0c;它们能够提升工作效率、保障信息安全、预防内部风险。然而&#xff0c;过度或不当使用监控软件也可能引发员工隐私担忧&#xff0c;影响工作积极性和团队氛围。因此&#xff0c;作为企业管理者&#xff0c;如何精准定…...

Linux·权限与工具-make

1. Makefile/makefile工具 首先展示一下&#xff0c;makefile工具如何使用。我们先写一个C语言程序 然后我们建立一个Makefile/makefile文件&#xff0c;m大小写均可。我们在文件中写入这样两行 wq保存退出后&#xff0c;我们使用 make 命令 可以看到生成了可执行程序&#xff…...

C++的序列容器——数组

前言&#xff1a; 这篇文章我们就开始新的章节&#xff0c;我们之前说的C/C的缺陷那部分内容就结束了。在开始新的章之前我希望大家可以先对着题目思考一下&#xff0c;C的容器是什么&#xff1f;有什么作用&#xff1f;下面让我们开始新的内容&#xff1a; 目录 前言&#x…...

TCC 和 XA 协议之间的区别?

TCC&#xff08;Two-Phase Commit&#xff09;协议和XA协议都是用于分布式系统中确保事务原子性的协议。它们在实现分布式事务协调方面有一些相似之处&#xff0c;但也存在一些关键的不同点。 协议的协调者&#xff08;Coordinator&#xff09;角色&#xff1a; TCC协议&#x…...

萌啦数据插件使用情况分析,萌啦数据插件下载

在当今数字化时代&#xff0c;数据已成为企业决策与个人分析不可或缺的重要资源。随着数据分析工具的日益丰富&#xff0c;一款高效、易用的数据插件成为了众多用户的心头好。其中&#xff0c;“萌啦数据插件”凭借其独特的优势&#xff0c;在众多竞品中脱颖而出&#xff0c;成…...

C++初学(13)

13.1、for循环的组成部分 for循环的组成部分完成下面这些步骤&#xff1a; (1)设置初始值。 (2)执行测试&#xff0c;看看循环是否应当继续。 (3)执行循环操作。 (4)更新用于测试的值。 C循环设计中包含这要素&#xff0c;很容易识别&#xff0c;初始化、测试和更新操作工…...

目标检测之数据增强

一、概述 数据增强是一种通过人工或自动方式对数据进行修改或变换&#xff0c;以增加数据集规模和多样性的技术。在机器学习中&#xff0c;数据增强被广泛应用于解决数据稀缺、数据不平衡、数据噪声等问题&#xff0c;提高模型的泛化能力和鲁棒性。 二、为什么需要数据增强 …...

本地下载安装WampServer结合内网穿透配置公网地址远程访问详细教程

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…...

一篇文章理清Java持久化脉络(关于JDBC、JPA、Hibernate、Spring Data JPA)

Java持久化 一、JDBC、JPA、Spring Data JPA 的定义及关系二、JDBC&#xff08;古老的东西&#xff0c;只需简单知道是啥&#xff09;1.1 JDBC概念1.2 JDBC示例 三、JPA&#xff08;第二代持久化&#xff0c;代表是Hibernate等框架&#xff09;3.1 JPA概念3.2 JPA示例 四、Spri…...

【数学分析笔记】第2章第1节实数系的连续性(1)

2. 数列极限 2.1 实数系的连续性 人类对数系认识的历史&#xff1a; 人类最早对数系的认识是自然数集合 N \mathbb{N} N&#xff0c;自然数系对加法和乘法是封闭的&#xff08;这里的封闭是指&#xff1a;若 m ∈ N , n ∈ N ⇒ m n ∈ N , m n ∈ N m\in\mathbb{N},n\in\ma…...

2026最权威的六大降重复率工具解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 飞速发展的人工智能技术&#xff0c;正深切地重塑着学术写作的范式&#xff0c;当下&#xf…...

终极Cinder着色器编程指南:7个GLSL视觉效果开发技巧

终极Cinder着色器编程指南&#xff1a;7个GLSL视觉效果开发技巧 【免费下载链接】Cinder Cinder is a community-developed, free and open source library for professional-quality creative coding in C. 项目地址: https://gitcode.com/gh_mirrors/ci/Cinder Cinder…...

cool-admin(midway版)前端表单验证:AsyncValidator与异步校验完整指南

cool-admin(midway版)前端表单验证&#xff1a;AsyncValidator与异步校验完整指南 【免费下载链接】cool-admin-midway &#x1f525; cool-admin(midway版)一个很酷的后台权限管理框架&#xff0c;模块化、插件化、CRUD极速开发&#xff0c;永久开源免费&#xff0c;基于midwa…...

LangChain、LangFlow、LangGraph:一文讲清三大 LLM 框架的定位与差异

01 | LangChain&#xff1a;LLM 应用的“基础设施层”① LangChain 是什么&#xff1f;LangChain 是一个用于构建 LLM 应用的通用框架&#xff0c;核心目标只有一句话&#xff1a;把「大模型 外部工具 数据源 Prompt」系统化地组织起来。它并不是一个“产品”&#xff0c;而…...

在QT中将多个项目(同代码不同ui和资源文件)合并

Linux下的qt环境 我现在有三个项目&#xff0c;代码一模一样&#xff0c;只有UI文件和资源文件不同现在想要合并代码 后期好上传在git 仅需要一个分支 更好管理将随行 康养 采图三个项目代码合并 思路是这样的 将每个项目都分类打包区分开我是在康养这个项目的基础上合…...

告别满屏窗口!AI智能体杀入职场,企业软件迎来“大洗牌”

SaaS不会像本地部署软件那样走向消亡&#xff0c;但随着AI更深入地渗透到推动企业运营的系统中&#xff0c;IT领导者在管理各类AI时面临着巨大挑战。今年1月&#xff0c;Anthropic低调发布软件插件&#xff0c;引发了SaaS类股票的疯狂抛售。在接下来的两周里&#xff0c;金融市…...

如何快速访问AO3镜像站:新手必看的5个实用技巧

如何快速访问AO3镜像站&#xff1a;新手必看的5个实用技巧 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site Archive of Our Own&#xff08;AO3&#xff09;是全球最大的同人创作平台&#xff0c;但部分地区访问受限。…...

5分钟掌握ViGEmBus:Windows虚拟手柄驱动的完整指南

5分钟掌握ViGEmBus&#xff1a;Windows虚拟手柄驱动的完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款专业的Windows内核级虚拟游戏手…...

用ZYNQ PS-SPI给Flash测个速:华邦W25Q80在25MHz时钟下的真实读写性能报告

ZYNQ PS-SPI Flash性能深度评测&#xff1a;华邦W25Q80在25MHz时钟下的极限挖掘 当我们需要在嵌入式系统中选择一款Flash存储器时&#xff0c;数据手册上的理论参数往往无法反映真实应用场景下的性能表现。本文将基于Xilinx ZYNQ平台的PS-SPI接口&#xff0c;对华邦W25Q80 Flas…...

告别环境配置烦恼:用快马一键生成keil5兼容c51与stm32的完整安装指南

作为一名嵌入式开发者&#xff0c;我深知在Keil5中同时配置C51和STM32开发环境的痛苦。每次换电脑或者重装系统&#xff0c;都要花大半天时间折腾各种安装包、环境变量和驱动问题。最近发现InsCode(快马)平台可以一键生成完整的配置指南&#xff0c;简直拯救了我的开发效率。下…...