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

Datadog如何将其Agent Go二进制文件的大小减少77%

进入2026年,信息技术的不断发展,好多东西修改变了人们工作习惯,编码不断完善修正,行业的变革越来越多。

在5年的时间里,Datadog代理从428 MiB增长到1.22 GiB,Datadog工程师们开始努力减少其二进制文件的大小。他们发现大多数Go二进制文件的膨胀来自于隐藏的依赖项、禁用的链接器优化以及Go编译器和链接器中的微妙行为。

这种增长影响了我们和我们的用户:网络成本和资源使用增加,人们对代理的看法恶化,并且在资源受限的平台上使用代理变得更加困难。

为了解决这个问题,Datadog 软件工程师 Pierre Gimalac 撰道,他们的方法包括审计导入、隔离可选代码以及消除反射/插件陷阱,以尽可能缩小二进制文件。

事实上,经过分析Agent的增长情况,Datadog的工程师们发现其增长是由新功能、额外的集成和大型第三方依赖(例如Kubernetes SDKs)推动的。特别是,Go的依赖模型包括传递性导入,这使得即使一个小的更改也能引入数百个包。

Datadog工程师们提出了两种实用的方法来移除不必要的依赖:使用构建标签(//go:build feature_x)来排除可选代码,并将代码移动到单独的包中,以便非可选包保持尽可能小。两种技术都需要系统地审计导入项,以确定哪些文件或包可以从给定的构建中排除。例如,将一个函数移动到自己的包中,从不使用它的二进制文件中移除了约570个包和约36 MB的生成代码。

审计依赖项不是一件容易的事,但Go生态系统提供了三个有用的工具来帮助:go list,它列出了构建中使用的所有包;goda,它可视化依赖关系图和导入链,以帮助理解为什么需要某个依赖项;和go-size-analyzer,它显示每个依赖项为二进制文件贡献了多少空间。

除了依赖优化,Datadog 工程师通过减少反射的使用,将代码大小进一步减少了 20%,反射可能会悄无声息地禁用一些链接器优化,包括消除死代码:

如果你使用非常量的方法名,链接器在构建时将无法知道在运行时将使用哪些方法。因此,它需要保留每个可到达类型的所有导出方法及其所有依赖的符号,这可能会大幅增加最终二进制文件的大小。

为了解决这个问题,他们在代码库和依赖项中尽可能消除了动态反射。这一步需要向kubernetes/kubernetesuber-go/diggoogle/go-cmp等项目提交多个 PR。

另一个禁用死代码消除的特性是Go插件,这是一种允许Go程序在运行时动态加载Go代码的机制。事实上,仅仅导入plugin包就会使链接器将二进制文件视为动态链接,“这禁用了方法的死代码消除,并且迫使链接器保留所有未导出的方法”。这个变化在某些构建中又额外减少了约20%。

最后,Gimalac 强调,这些改进是在六个月的时间内完成的,并且最重要的是,不需要移除任何功能。他的账户包含更多无法在此涵盖的细节,因此请务必阅读以了解整个故事。

软件工程师的努力,会不是最后优化的自己,是否可以有一个共存的方法机制呢?

http://www.jsqmd.com/news/466446/

相关文章:

  • 注意力涣散是什么?ADHD注意力缺陷与多动症行为疗法的关键是什么?
  • 7.7实时内核调试支持
  • 云平台构建 RDMA高性能网络
  • 26版无菌附录|无菌药品高效过滤器检漏:条款解读+实操指南
  • Openclaw 龙虾卸载指南
  • 医药AIGC实战指南:AI疾病筛查助力药企实现精准患者挖掘与转化
  • 告别爬虫 openclaw 使用 Tushare 获取 A股市 美股 行情信息 历史数据 财务信息
  • 西门子1500 PLC立体仓库项目解析:智能仓储的实际应用
  • 算法杂记内容
  • 储能充放电状态约束
  • 2026年防火涂料用珍珠岩优质供应商推荐榜:珠光砂、闭孔珍珠岩、防火涂料用珍珠岩、防火门芯板、食品添加剂珍珠岩选择指南 - 优质品牌商家
  • 浏览器唤起支付宝打开特定地址
  • OpenClaw截至2026年3月11日,主流服务商与收费模式如下:
  • 爬虫学习阶段三:动态网页爬取(完整学习文档)
  • 十大品牌净水器排名,2026家用大型净水器全场景选购攻略 - 速递信息
  • Matlab人脸识别:PCA算法在Yale数据库中的应用及使用说明
  • Homebrew 详解:Mac 必备包管理工具及常用命令大全
  • 教程:自托管 OpenClaw 实现全离线任务自动化
  • 一文吃透动态规划:通用解题框架 + 实战案例
  • Flutter 三方库 sparky 的鸿蒙化适配指南 - 实现极简 2D 游戏引擎功能、支持高效精灵图渲染与跨端游戏逻辑
  • 大厂集体“养龙虾”!IT人再不进化就真的晚了!
  • 代码为舟,初心作桨——我的CSDN创作256天纪念
  • Python CSV文件处理详细教程
  • ChatGPT秒回的秘密?Transformer架构深度解析,不看后悔!
  • 专业不锈钢黑棒定制加工服务推荐:满足精密需求,不锈钢高压锅炉管/不锈钢薄壁板/不锈钢卷,不锈钢黑棒现货批发推荐 - 品牌推荐师
  • 关于化合物2471983-20-5(FAPI)的实验应用与保存规范说明
  • 车辆轮廓、车辆限界、设备限界与建筑限界的概念辨析及工程应用
  • 新能源倍速链流水线厂家核心实力,看这4点就够了
  • Vue的生命周期有哪些及执行机制?
  • 打开风电数据文件的瞬间,十几个G的CSV文件直接把同事的Excel卡崩了。这种真实数据就像没过滤的自来水,直接喝肯定窜稀。咱们先来点硬核预处理