1 个不稳定版本
0.4.0 |
|
---|---|
0.3.1 |
|
0.3.0 |
|
0.2.9 |
|
#26 在 #added
被 2 crates 使用
17KB
306 行
通过为所有分配添加32字节头部来跟踪Rust内存使用情况。请参阅https://doc.rust-lang.net.cn/std/alloc/trait.GlobalAlloc.html
用法
以下代码可用来启用该库的使用
use near_rust_allocator_proxy::allocator::MyAllocator;
#[global_allocator]
static ALLOC: MyAllocator = MyAllocator;
设计
- 头部 - 对于每次内存分配,我们添加一个32字节头部。这允许通过查看进程的内存转储来确定内存是如何分配的。
- 每线程内存使用统计 -
thread_memory_usage(tid)
方法可以用来获取线程分配的内存量 PRINT_STACK_TRACE_ON_MEMORY_SPIKE
- 如果设置为true,当内存激增时将使用堆栈跟踪
常量
ENABLE_STACK_TRACE
- 如果启用,每次分配时都会执行backtrace
,并将堆栈指针添加到头部MIN_BLOCK_SIZE
- 如果分配大小小于MIN_BLOCK_SIZE
,则只有在SMALL_BLOCK_TRACE_PROBABILITY
百分比的时间内运行backtrace
SMALL_BLOCK_TRACE_PROBABILITY
- 小分配执行堆栈跟踪的概率REPORT_USAGE_INTERVAL
- 如果启用打印内存激增,则当内存使用超过此字节数时打印PRINT_STACK_TRACE_ON_MEMORY_SPIKE
- 如果为true,当给定Rust线程的内存使用超过REPORT_USAGE_INTERVAL
时打印堆栈跟踪
头部表示
分配结构
- magic - 唯一的8字节标识符,用于标记内存分配
- size - 字节数
- tid - 线程ID
- stack - 分配时的堆栈跟踪
#[repr(C)]
struct AllocHeader {
magic: u64,
size: u64,
tid: u64,
stack: [*mut c_void; STACK_SIZE],
}
待办事项
- 添加设置配置的方法,而不是更改常量。
- 添加测试
依赖项
~9.5MB
~205K SLoC