Lesstep
GitHub Actions・ランナー・2026年11月5日に確認

GitHub Actions の「Process completed with exit code 137」:メモリで強制終了されたプロセスと、ランナーのメモリの量

終了コード 137 は 128 + 9 で、ステップの中のプロセスが SIGKILL で終わったことを表します。自分のコードがこの合図を送ることはなく、GitHub のホストのランナーでは、ほとんどがカーネルの OOM killer(メモリ不足のときに大きなプロセスを選んで止める仕組み)によるものです。仮想マシンのメモリが尽きると、プロセスが止められてステップが失敗し、ジョブはそれを報告して続きます。仮想マシン全体があふれたときは、ランナーそのものが失われます(「The runner has received a shutdown signal」)。

見え方

止められたプロセスは自分では何も出しません。シェルかタスクランナーが強制終了を知らせ、ステップは 137 で、またはラッパーが自分の失敗に置き換えて 1 で失敗します(microsoft/vscode #341818):

[eslint                   ] Killed
ERROR: "eslint" exited with 137.
##[error]Process completed with exit code 1.

モノレポでは、タスクランナーがパッケージの名前を出します(desk-skills #409):

##[error]@repo/api#type-check: command (.../packages/api) pnpm run type-check exited (137)
##[error]Process completed with exit code 137.

たいていは、ときどきしか起きません。vscode では、2026年10月14日と15日のプルリクの実行のうち直近80回中3回で ESLint が止められました。実行が始まって4分45秒、同じランナー(このプロジェクトの独自の大きいランナー)で縮小したバンドルを並行してビルドしている最中でした。もう1つの報告では、同じジョブが前後の main では通っていて、ブランチに直すものはありませんでした。止められるかどうかは、同じ瞬間にほかの何がピークを迎えるかで決まります。

ランナーのメモリの量

GitHub の標準のランナーの説明から(GitHub-hosted runners):

そのため、公開のリポジトリで通っていたジョブが、非公開のリポジトリに移ると止められることがあります。メモリも CPU も半分になるからです。

プロセスの見つけ方

ピークの下げ方

見分け方

失敗したジョブを IntelliJ IDEA から見るなら

Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べるので、強制終了されたステップがすぐ分かり、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。

JetBrains Marketplace で入れる

GitHub と GitHub Actions は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc. とも JetBrains とも提携しておらず、承認も受けていません。

ほかに:The runner has received a shutdown signal · No space left on device · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English