Skip to content

test run 触发 OOM:cargo llvm-cov 全量插桩编译导致内存耗尽 #9

Description

@Guo-Zhang

问题描述

qtcloud-devops test run 在 15GB 内存的机器上反复触发 OOM killer,系统卡死后进程被强制终止。

根因

test::run 对 Rust scope 调用 cargo llvm-cov,该命令强制所有依赖(包括 ringrustlsgit2 + vendored libgit2 等 C 扩展)以 -Cinstrument-coverage 重新编译。插桩编译比普通 cargo test 内存开销高出数倍。

叠加以下因素时系统必然 OOM:

  1. 无并发控制cargo llvm-cov 使用默认并行度,不限制 job 数
  2. 无内存检测:启动前不检查可用内存,无法降级为普通 cargo test
  3. 其他进程抢占:opencode(75GB VSZ / 57GB VmData 匿名映射)占用大量虚拟地址空间,导致其 OOM 评分虚高,系统优先杀它

影响范围

  • 在 15GB 内存机器上复现概率 100%
  • 触发条件:test run + 同时运行 opencode/zed-editor 等大内存进程
  • 非 Rust scope(Python/Go/Dart/TS)不受影响

建议修复

  1. 添加 --jobs N 参数,传给 cargo llvm-cov-j N
  2. 启动前检查 /proc/meminfo 可用内存,低于阈值时回退到 cargo test(不带覆盖)
  3. 限制 cargo llvm-cov 为可选的 --coverage 开关,默认只跑 cargo test

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions