Rust 中一个奇怪的内存溢出错误调查

2025-01-19
Rust 中一个奇怪的内存溢出错误调查

Qovery 的一个名为 engine-gateway 的 Rust 服务遇到了奇怪的内存溢出错误。起初,监控显示内存使用稳定,但服务却突然崩溃。经过调查,发现罪魁祸首是 anyhow 库在启用回溯时,会在每个错误上捕获回溯,只有在调试模式下打印错误时才会解析符号,导致内存大量增加。最终,通过设置环境变量 `RUST_BACKTRACE=1` 和 `RUST_LIB_BACKTRACE=0`,只在 panic 时启用回溯,解决了问题。这个案例提醒我们,监控数据可能具有欺骗性,并且需要仔细阅读库的文档。