百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

适用于 Linux 的内存分析器:Bytehound

ahcoder 2025-06-23 14:25 2 浏览

#暑期创作大赛#

特征

  • 可用于分析内存泄漏,查看内存到底在哪里被消耗,识别临时分配并调查过多的内存碎片
  • 收集每次分配和释放以及完整的堆栈跟踪
  • 可以动态剔除临时分配,使您能够在很长一段时间内进行分析
  • 使用定制的堆栈展开实现,这使得它比其他类似工具便宜得多,在某些情况下可能快几个数量级
  • 可以将其收集的数据导出为各种不同的格式;它可以将数据导出为 JSON(因此您可以根据需要自行分析)、Heaptrack(因此您可以使用出色的Heaptrack GUI进行分析)以及火焰图
  • 拥有自己的基于 Web 的 GUI,可用于分析
  • 可以动态地将分析数据传输到另一台计算机,而不是将其保存在本地,这对于在内存受限的系统上进行分析非常有用
  • 支持 AMD64、ARM、AArch64 和 MIPS64 架构(其中 MIPS64 需要一个微小的树外内核补丁perf_event_open)
  • 支持对使用 jemalloc 作为分配器的应用程序进行分析(仅适用于带有jemallocatorcrate 的 AMD64)
  • 支持基于Rhai的嵌入式 DSL ,以允许编程和/或自动数据分析

截图

构建

  1. 安装 GCC、Rust nightly(仅支持 1.62 或更高版本)和 Yarn 包管理器(用于构建 GUI)
  2. 构建它:
$ cargo build --release -p bytehound-preload 
$ cargo build --release -p bytehound-cli
  1. target/release/libbytehound.so从和获取二进制文件target/release/bytehound

用法

基本用法

$ export MEMORY_PROFILER_LOG=warn
$ LD_PRELOAD=./libbytehound.so ./your_application
$ ./bytehound server memory-profiling_*.dat

然后打开 Web 浏览器并将其指向http://localhost:8080以访问 GUI。

文档

您可以在我们的《内存分析的乐趣和利润》一书中找到该分析器的完整文档。

启用完整调试日志

默认情况下,出于性能原因,分析器在编译时禁用了大部分调试日志。要重新启用它们,请务必使用该debug-logs功能重新编译它,例如:

$ cd preload
$ cargo build --release --features debug-logs

相关推荐

Linux 下如何查看进程的资源限制信息?

简介Linux上的cat/proc/$pid/limits命令提供有关特定进程的资源限制的信息,其中$pid是相关进程的进程ID(pid)。该文件是`/proc文件系统的一部分,该...

Linux入侵排查TOP10误区!90%工程师都踩过坑

导语“删除恶意文件却破坏了关键证据”“盲目重启系统导致攻击链中断”——这些看似合理的操作,可能让入侵排查陷入僵局。据统计,全球90%的Linux工程师在首次应对入侵事件时至少踩中3个排查误区。本文深度...

一文掌握怎么利用Shell脚本实现Linux系统资源监控管理程序

简介:在日常管理Linux服务器时,监控和管理系统资源是确保服务器稳定运行的关键。及时了解CPU、内存、硬盘以及网络的使用情况,可以帮助我们预防系统故障,并找出性能上的瓶颈。虽然有很多专业的监控工具,...

Linux 下的 PM2 完整指南(linuxnmcli)

PM2是Node.js应用的专业级进程管理器,专为生产环境设计,提供应用守护、集群管理、日志监控等核心功能。核心特性应用守护:崩溃时自动重启零秒重载:热更新应用不停机(pm2reload)...

linux中磁盘满了?一招教你快速清理

创作背景:当天部署服务时,发现无法部署,后来经过日志排查后发现服务器磁盘满了,查询资料后进行了清理。话不多说,直接上解决方法。操作一:1.查看磁盘大小:df-h2.直接在最上层进行排序:du-a...

适用于 Linux 的内存分析器:Bytehound

#暑期创作大赛#特征可用于分析内存泄漏,查看内存到底在哪里被消耗,识别临时分配并调查过多的内存碎片收集每次分配和释放以及完整的堆栈跟踪可以动态剔除临时分配,使您能够在很长一段时间内进行分析使用定制的堆...

一文讲清Python在Linux系统CPU、内存和磁盘管理方面的应用实例

摘要:在当今快速发展的IT运维和开发世界里,Linux系统凭借其高效能、高稳定性和开源的特性,在服务器管理、云计算服务以及大数据处理等众多领域中占据了核心位置。随着业务规模扩大,系统资源的监控与管理变...

Linux系统磁盘分区管理LVM概念及扩容操作

LVM的全称为LogicalVolumeManager,逻辑卷管理。它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过L...

ringbuffer 消息队列 内存池 性能优化利器

简约而不简单的ringbuffer最近在研究srsLTE的代码,其中就发现一个有意思的数据结构------ringbuffer。虽然,这是一个很基本的数据结构,但时,它在LTE这种通信协议栈系统中却大...

Rocky Linux 9常用命令备忘录(不定时更新)

RockyLinux9常用命令备忘录(不定时更新)大家好,我是星哥,上次介绍了<RockyLinux9系统安装配置图解教程并做简单配置>:https://mp.weixin.qq...

理解Linux的Memory overcommit(linux reserved-memory)

MemoryOvercommit的意思是操作系统承诺给进程的内存大小超过了实际可用的内存。一个保守的操作系统不会允许memoryovercommit,有多少就分配多少,再申请就没有了,这其实有些浪...

Linux systemd 4 命令深度对比:休眠、睡眠、关

"90%的人不知道Linux关机命令暗藏玄机?三招教你选对保命符"键盘突然没反应?电脑卡成PPT?这些崩溃瞬间可能都怪你选错了系统命令!今天就用咖啡厅偶遇的工程师视角,带你看懂Linu...

一次解决Linux内核内存泄漏实战全过程

什么是内存泄漏:程序向系统申请内存,使用完不需要之后,不释放内存还给系统回收,造成申请的内存被浪费.发现系统中内存使用量随着时间的流逝,消耗的越来越多,例如下图所示:接下来的排查思路是:1.监控系统中...

Linux系列:聊一聊 SystemV 下的进程间共享内存

一:背景1.讲故事昨天在分析一个linux的dump时,看到了这么一话警告,参考如下:0:000>!eeheap-gc***WARNING:Unabletoverifyt...

linux收发网络包过程(linux收包流程)

网络模型由于OSI模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案事实上,我们比较常,也比较实用的是四层模型,即TCP/IP网络模型,Linux系统正是按照这套网络模型...