不释放内存似乎是 Rust Web 框架的普遍问题

发现问题

在 Rust 社区中,有人提到 actix-web 构建的服务器在承载大量请求后,即使请求结束,服务器的内存占用依然维持在较高水平,可能存在内存泄漏。

然而,有社区成员反馈,不仅仅是 actix-webaxumsalvo 等其他框架也出现了类似的现象。此外,对 HashMap 这种基础数据结构进行大量插入并释放后,内存也不完全释放。因此,问题可能不在于 web 框架本身。

可能原因

有社区成员指出,这可能是内存分配器的问题。在对象释放后,内存分配器未立即将内存归还给操作系统,而是缓存已申请的内存,以备后续分配使用。

相关讨论

解决方案

更换内存分配器可能可以缓解该问题。例如,可以将 Rust 的默认内存分配器替换为 mimalloc 来优化内存管理。

Rust 默认的内存分配器依赖目标平台

// 引入 mimalloc 作为全局内存分配器
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;