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