不释放内存似乎是 Rust Web 框架的普遍问题
发现问题
在 Rust 社区中,有人提到 actix-web
构建的服务器在承载大量请求后,即使请求结束,服务器的内存占用依然维持在较高水平,可能存在内存泄漏。
然而,有社区成员反馈,不仅仅是 actix-web
,axum
、salvo
等其他框架也出现了类似的现象。此外,对 HashMap
这种基础数据结构进行大量插入并释放后,内存也不完全释放。因此,问题可能不在于 web 框架本身。
可能原因
有社区成员指出,这可能是内存分配器的问题。在对象释放后,内存分配器未立即将内存归还给操作系统,而是缓存已申请的内存,以备后续分配使用。
相关讨论
解决方案
更换内存分配器可能可以缓解该问题。例如,可以将 Rust 的默认内存分配器替换为 mimalloc 来优化内存管理。
Rust 默认的内存分配器依赖目标平台
// 引入 mimalloc 作为全局内存分配器
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;