Skipbox

GitHub Actions のメモリ不足(exit code 137)を定額で解決

ビルドが exit code 137 で落ち、だれかが再実行し、テストのワーカーを減らし、swap を足す。そのたびに CI は遅くなります。落とし続けているランナーのメモリは 8 GB で、GitHub の大きいランナーは分課金です。

Skipbox は、16 GB と 32 GB のマシンを月額固定・実行時間無制限で使える GitHub Actions ランナーです。runs-on: skipbox に 1行書き換えるだけで、月 6,000 円でビルドのメモリが ubuntu-latest の 2倍になります。runs-on: skipbox-8x16 なら、コアも 2倍です。

exit code 137 は、メモリを使い切った印

137 は 128 + 9 です。プロセスがシグナル 9(SIGKILL)で止められたという意味で、このシグナルはプロセス側では受け止められません。だからエラーも出さずに終わります。GitHub ホストランナーで SIGKILL を送るのは、Linux の OOM killer です。ジョブのプロセスが合わせてマシンのメモリを使い切ると、1つを選んで止めます。

プライベートリポジトリの ubuntu-latest のメモリは 8 GB です。ランナーのアプリ、Docker、サービスのコンテナーも、ここから使います。モノレポのビルド、ワーカーを増やした Gradle、Rust のリリースビルド、ブラウザーを何枚も開く Playwright は、ふだんの日でもこれを超えることがあります。

8 GB のままにするコスト

回避策は、どれもメモリの代わりに速さを差し出します。テストのワーカーを減らす、CARGO_BUILD_JOBS=1 にする、-Xmx を下げる、swap を足す。収まるようにする代わりにビルドが遅くなり、チームは push のたびにその遅いビルドを待ちます。コードが増えれば、137 はまた戻ってきます。

GitHub で直すなら大きいランナーですが、分課金で、使えるのは GitHub Team と Enterprise Cloud の組織だけです。同じメモリで比べると、こうなります。

GitHub の額は、GitHub Team に含まれる無料分を引いたあとの請求です。自分のチームの分数は、トップページの料金計算で出せます。

使うメモリは、これからも増えます。コーディングエージェントはコードと依存パッケージを人より速く増やし、テストは大きくなり、ツールの更新ひとつで同じコミットのメモリが倍になることもあります。そこに、大きいランナーの分課金が push のたびに乗ります。

自分で直そうとすると

8 GB のまま通すには、こういう作業が要ります。

  • if: failure() のステップで dmesg を読み、止められたプロセスを特定する
  • そのツールの上限を調整する(--max-old-space-size、-Xmx、org.gradle.workers.max、--maxWorkers)
  • compose.yaml でサービスのコンテナーごとにメモリの上限をつける
  • 重いステップの前に swapfile を作る。ディスクは 14 GB しかない
  • ジョブを分けて、1つのステップが全部を使わないようにする

どれもビルドを遅くするか壊れやすくするもので、コードが育てばまたやり直しです。大きなマシンにすれば、この作業はなくなります。

Skipbox でジョブに渡せるもの

定額のメモリ

ジョブは、ラベルでマシンの大きさを選びます。

実行時間は無制限です。減らしたワーカーを元に戻せば、ビルドはメモリとコアの両方を使えます。

ビルドがさらに速くなる

アカウント専用のマシンがジョブのあとも残るので、Docker のレイヤー、パッケージのキャッシュ、ツールが、次のジョブの前からディスクにあります。

予算で止まらない、管理も要らない

Skipbox のジョブは GitHub の分数を使わないので、GitHub の予算で止まりません。マシンの用意、イメージの更新、ジョブごとの後片付け、ヘルスチェックと自動復旧は Skipbox が行います。

移行は runs-on を 1行書き換えるだけ

jobs:
  build:
    runs-on: skipbox # ubuntu-latest から書き換える
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run build
  1. Skipbox に GitHub でログインする
  2. Skipbox の GitHub アプリを入れて、使うリポジトリを選ぶ
  3. runs-on を書き換えて push する。プラン S(月 6,000 円)は 16 GB、32 GB が要るなら L を選ぶ

マシンは Ubuntu 24.04 で、パスワードなしの sudo、Docker、Node.js、Python が入っています。ステップはそのまま動きます。

セキュリティ

  • マシンはアカウントごとの専用です。ほかの会社のジョブと同じマシンで動くことはありません。
  • ジョブが終わるたびに、ランナーの認証情報、プロセスとコンテナをすべて消します。2026年11月13日からは、チェックアウトしたコードと Cargo のビルド結果(target/)を専用のマシンに残し、次のジョブで使います。「毎回クリーン」なら、ジョブごとに新しいマシンで動きます。
  • 書き込み権限のない人のコード(フォークからのプルリクエストなど)は、使い捨ての新しいマシンで動きます。

くわしくはジョブの分離のしくみにあります。

まず移してみる

カード不要で、7日間かジョブの合計 3,000分まで無料です。トライアルのマシンは 4 vCPU・16 GB で、メモリはプライベートリポジトリの ubuntu-latest の 2倍です。137 で落ちるジョブを移して、そのまま動かしてみてください。同じメモリでコアを増やすならプラン M の skipbox-8x16、さらにメモリが要るならプラン L の skipbox-16x32(32 GB)です。

よくある質問

GitHub Actions の exit code 137 とは?

プロセスがシグナル 9(SIGKILL)で止められた、という意味です(128 + 9 = 137)。GitHub ホストランナーでは、ジョブがランナーのメモリを使い切り、Linux の OOM killer が止めたときがほとんどです。確実に直すには、メモリの多いマシンで動かします。Skipbox なら 16 GB と 32 GB のマシンを月額固定で使えます。

GitHub Actions のランナーのメモリは何 GB?

プライベートリポジトリの ubuntu-latest は 2 CPU・メモリ 8 GB です。GitHub の大きいランナーは 4コアで 16 GB、8コアで 32 GB ですが、分課金で、使えるのは GitHub Team と Enterprise Cloud の組織だけです。Skipbox はプラン S(月 6,000 円)で 16 GB、プラン L で 32 GB、実行時間は無制限です。

JavaScript heap out of memory のエラーと exit code 137 は同じ?

違います。heap out of memory は Node が自分のヒープの上限で止まったもので、--max-old-space-size で上げられます。137 はマシン全体のメモリがなくなってカーネルが止めたもので、ヒープの上限を上げるとかえって悪くなります。ビルドに本当にメモリが要るなら、runs-on: skipbox で 16 GB のマシンに移します。

GitHub Actions のメモリを増やすには?

ubuntu-latest のメモリは変えられないので、ランナーを替えます。Skipbox なら runs-on を skipbox に書き換えるだけで 16 GB、skipbox-16x32 なら 32 GB です。サーバーを自分で用意する必要はありません。

Skipbox の無料トライアルでメモリ不足は直る?

メモリは 2倍になります。トライアルで動くのは runs-on: skipbox の 4 vCPU・16 GB で、プライベートリポジトリの ubuntu-latest(8 GB)の 2倍、GitHub の 4コアのより大きなランナーと同じです。それでも足りないジョブは、プラン L を選んでラベルを skipbox-16x32(32 GB)に書き換えてください。

2026年11月11日 更新

常に warm なキャッシュで CI/CD を高速化するなら

専用ランナーを定額で。実行時間は無制限

フル稼働なら GitHub の 1/12 の費用。定額だから一日中動かせる。GitHub の 7倍のキャッシュ容量。

  • カード不要
  • GitHub でログイン
  • いつでも解約