運用者はOpenClawゲートウェイの成功ログを覚えていますが、本番は終了コードの語彙を教えます。二〇二六年もmacOSのlaunchdは137でメモリ圧力、143で丁寧なSIGTERM、急速な再起動でplistの誤りを示します。本文はConsole.appとlog show、doctorとの相関までを日本語で整理します。
合わせて読む: doctor診断、LaunchAgentリカバリ、メモリ剪定。
終了コード早見表
| コード | 典型 | 最初の確認 |
|---|---|---|
| 0 | 正常終了 | 意図的停止か |
| 1 | 汎用エラー | stderrパス |
| 137 | OOM/SIGKILL | メモリとツール出力 |
| 143 | SIGTERM | reload/デプロイ |
運用メモ(詳述)
運用者はOpenClawゲートウェイの成功ログを覚えていますが、本番は終了コードの語彙を教えます。二〇二六年もmacOSのlaunchdはスタジオのMac miniでもクラウドのminiでもNodeランタイムを同じように包み、百三十七は多くの場合メモリ圧力、百四十三は丁寧なSIGTERM、急速な再起動はplistの誤りを示します。
exit百三十七は並列ツール呼び出しがそれぞれ巨大な標準出力をバッファすると相関しやすく、八ギガ統合メモリでは同時ツールを三つへ抑え、モデルの文脈窓もActivity Monitorのピークに合わせて下げます。
launchdは非ゼロ終了のあとThrottleIntervalでバックオフを掛け、KeepAliveが攻撃的だと一秒未満で死ぬと同じタイムスタンプの壁が立ち最初の本当の一行が隠れます。デバッグ中は十秒へ上げ、原因修正後に本番値へ戻します。
log showの述語はsubsystemをcom.apple.xpc.launchdへ絞り、ラベル文字列でさらに狭くし、JSONへ吐き出して監査でgrepできる形にします。Console.appでは再現前からストリームを開始し、クラッシュ直後に一時停止してバッファ喪失を避けます。
exit百四十三はデプロイスクリプトのreloadや手動killで起きやすく、graceが十五秒でもツール呼び出しが猶予を超えると百三十七へ昇格することがあります。readyzを先に偽へ倒して負荷を止める方がNodeフラグ調整より効きます。
KeepAliveのSuccessfulExitを誤ると健全なゼロ終了でも再起動が走り、クラウドMacのCPUクレジットを焼きます。launchctl print guiのUIDとラベルで実状態をスクショし変更管理へ添付します。
LinuxのCIコンテナは統合メモリ圧縮やlaunchdのライフサイクルやKeychainプロンプトを再現しないので、macOSでのスモークが昇格前の最後の関門です。約十六・九米ドル毎日のminiがラップトップ郵送より安く差分を潰します。
StandardErrorPathが満杯で追記できないとコード一で落ちることがあり、/private/varとカスタムログdirの空きを五ギガ以上で監視し、newsyslog風の回転を運用書に明記します。
ポストモーテムは最後の健全リクエストIDから最初のクラッシュ行までの時系列と終了コードとシグナルとlaunchd理由文字列とメモリ最大値と同時ツール数とdoctor出力のハッシュと設定差分とフォローアップを揃えます。
SIGTERM後にSIGKILLへ十五秒で落とすブルーグリーンは接続切りDrainが間に合わないと百三十七を残すので猶予延長かツール扇の縮小が先です。
Prometheusへprocess_start_timestamp_secondsとprocess_exit_codeとrss_bytes_maxを常時送れば、三系列だけでメモリかデプロイか設定かを切り分けられます。
OpenClawのdoctorはポートとトークンとディスクパスを検証するので、クラッシュ直前の出力をSHAで固定し、plistのバージョンとセットで保管します。
メモリと文脈の剪定は長大なツール転写が無制限に伸びるときの主因なので、関連記事の方針へ合わせJSON深さと添付サイズをゲートウェイで拒否します。
launchdのRunAtLoad真偽を文書化しないと、昼に手動unloadしたつもりが数分後に自動reloadされ真因が隠れることがあります。
ツールのstdoutがメガバイト級なら圧縮が始まる前に遅延が先に出るため、兆候を共有ログへ書き込みます。
クラウドminiはSSHとVNCでログを読み上げる分散チームの通話でもファン音が邪魔になりにくく、リリース週末だけ常時オンにできます。
Consoleのお気に入りをゲートウェイ終了専用に作り、subsystemとメッセージ包含を組み合わせます。
sysdiagnoseはファイルシステムやkext疑いがあるときに限定し、通常は軽量証跡で足ります。
失敗窓のActivity Monitorサンプルはカスタムミドルウェアの密なループを示すことがあり、stderrに出ない停滞を炙り出します。
launchctl kickstartの乱用は状態競合を増やすので、運用手順ではunloadとloadの順序を固定します。
環境変数のプロファイル切替はハッシュ差分を短く残し、誰がいつどの値を入れたか追跡できるようにします。
TLSとJWTの時刻ずれは別記事の通り再起動ループに見えることがあるため、NTPと鍵チェーンを先に疑います。
最後に、終了コード考古学は退屈でも障害分より安いので、証跡の型をテンプレ化して反復コストを下げます。
追加の観測として、ゲートウェイが短時間に何度も百四十三を返すときはデプロイ競合よりログローテーション競合の可能性も疑い、ファイルディスクリプタ上限とulimitの実値を同じタイムウィンドウで取得します。
ツールのJSONが深すぎるとパース前にメモリが膨らむため、ゲートウェイ側で深さ上限と配列長上限を拒否理由付きで返し、クライアントへ早期に気付かせます。
同一ホストで複数エージェントを走らせるとログファイルのロック競合が静かに遅延を増やし、結果としてタイムアウトで終了コードが散らばることがあります。ラベルとパスを分離し、共有ディレクトリへの追記を避けます。
クラウドminiではスナップショット復元とplist差し替えを短いRunbookへ固定し、週末オンコールが迷わないようコマンドをそのまま貼れる形にします。
doctorの警告を無視したまま本番流量を戻すと、再現はしにくいが統計だけが悪化する状態になります。警告はチケット化し、閾値を一つずつ潰す方針を残します。
launchd ThrottleIntervalとクラッシュループ
非ゼロ終了のあとThrottleIntervalでバックオフします。デバッグ中は十秒へ上げ、原因修正後に戻します。
log showの述語
log show --last 30m --predicate \
'subsystem == "com.apple.xpc.launchd" AND eventMessage CONTAINS[c] "openclaw"'
Console.app手順
- subsystemとメッセージで絞るお気に入りを作る。
- 再現前からストリーム開始。
- 直後に一時停止してバッファ喪失を避ける。
メモリ圧力とツール扇
137は並列ツールstdout肥大と相関しやすいです。八ギガでは同時ツールを三つへ。
サンプル取得
CPUが長時間張り付くならActivity Monitorでサンプルを採取します。
plist衛生
KeepAliveのSuccessfulExit誤設定は健全終了でも再起動を招きます。
Linux CIが再現しない理由
統合メモリ圧縮とlaunchdはLinuxにありません。macOSスモークが必要です。
ポストモーテム
- 時系列、終了コード、理由文字列
- メモリ最大値と同時ツール数
- doctorハッシュと設定差分
stderrローテーション
ディスク満杯はコード1で落ちることがあります。五ギガ以上の空きを監視します。
シグナル運用
graceが短いとSIGKILLで137になります。/readyzで先に流量を止めます。
フライトレコーダ
process_exit_codeとrss_bytes_maxを常時送ります。
FAQ
137は常にOOM?
多くはそうですがグラフで確認します。
143はデプロイ?
reloadでよく出ます。
Mac miniを約十六・九米ドル/日で借り、launchd挙動を本番に近づけられます。