job 跑十几分钟后失败,日志里只有一行 The operation was canceled 加 exit code 137,前面每一步都显示成功,重跑还落在同一处,看不出是内存还是超时。日志里能对上时间点,这种反而好排。

137 表示进程收到 SIGKILL,托管 runner 内存超限被杀和 job 打到 timeout-minutes 上限都会给这个码,光看码分不出来,得回去翻耗时和内存日志,两种情况处理方式完全相反。这一点先确认清楚,后面就不用反复试。

jobs:
  build:
    timeout-minutes: 45
    steps:
      - run: free -m && nproc

「GitHub Actions exit 137」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。

处理上按这个顺序:先翻日志里有没有 OOM 或者内存不足的提示 先把内存原因排除掉;再看这一步的耗时是不是刚好贴着超时上限 差几秒也能看出来;内存问题拆步骤降并发 超时就直接调 timeout-minutes 两种改法别混用。

结果对不对很好判断,重跑后 job 完整结束,日志里能看到最后一步的真实输出,耗时也和上次相近。

作者 9823189