添加新基准测试后Rust Criterion构建失败,求排查原因
问题:新增基准测试后cargo-criterion/cargo bench构建失败,rustc被SIGKILL终止
问题现象
使用criterion和cargo-criterion为项目执行基准测试时,添加若干新基准测试后,执行cargo criterion或cargo bench均无法完成构建步骤,返回以下错误:
Error: Failed to parse message from cargo187/190: continuous(bench), test_data(bench), simplistic(bench) Caused by: expected value at line 188 column 1 error: could not compile `compiled-regex`
进一步排查发现rustc进程被SIGKILL信号终止,但未给出具体原因。单独运行工作区示例文件中的单个基准测试可正常完成,调整基准测试的组合与顺序也未发现异常。
临时解决方案
经提示确认问题根源为编译器内存占用过高,移除部分自动生成函数的内联属性后,构建可正常完成。
可能的根本原因排查方向
- 生成函数复杂度:自动生成的函数若逻辑复杂、代码量庞大,内联后会导致rustc在优化阶段需要处理的代码规模急剧膨胀,超出系统内存限制
- 优化级别影响:基准测试默认使用
--release优化级别,高优化策略下,内联大量代码会进一步加剧编译器的内存压力 - 编译单元规模:单个编译单元内包含过多内联后的大函数,会导致rustc在类型检查、优化等阶段内存占用飙升
- 可通过
cargo build --bench --verbose查看编译详细日志,定位具体是哪个函数或模块触发了内存溢出
内容的提问来源于stack exchange,提问作者Tobiky
相关产品推荐
相关产品推荐

