AI / Automation 2026年4月22日

2026年版:launchd 配下のレンタル Mac mini で OpenClaw の ulimit・メモリ・CPU ガードレールを張る

ProxyMac Engineering Team 2026年4月22日 約12分で読めます

OpenClawHK・JP・KR・SG・USProxyMac Mac mini M4 に載せたとき、常駐メモリ(RSS)launchd が想定した安全域を越えると静かに死ぬ。UI は「稼働中」のままだが、チャネルアダプタはカーネルがページをプローブ間隔より速く追い出した結果、ジョブ受理を止める。運用はしばしば「モデルが悪い」と決めつけるが、実体は無人ジョブの 既定 ulimit -n 256 や、MCP セットアップ で述べた子プロセス急増による fork 圧 である。本稿(2026)は 無言 OOM の手掛かりシェルと LaunchAgent の ulimit 二世界三つの数値閾値(物理 RAM の 70% ヘッドルーム、開ファイル 10k、時間当たりスワップイン 2GB)、SoftResourceLimitsコピペ可能 plist 断片、そして 並列エージェントヘルスプローブ への接続までを一枚にまとめる。

ログ切り分けは デプロイ障害対応 と併読し、Runbook は ヘルプセンター を参照。上限ではなく設計がボトルネックなら 料金ページ で SKU を上げる。

無言 OOM と上限シグナル:モデルを疑う前に取るログ

unified logging は jetsam を info ノイズの下に埋めがちである。ツール p95 レイテンシが 4 倍以上 に跳ねる一方 CPU が 40% 未満 に留まるパターンは、遅い LLM ではなくメモリ圧迫の典型だ。別の手掛かりは MCP stdio ブリッジでの ENOTFILEToo many open files—並列エージェント急増時に顕在化する。

  • Compressor スワップイン:16GB SKU で持続的に 500MB/h 超 なら快適余白を既に失っている。
  • LaunchAgent の throttleReasonresource-limits が出る—plist 版を Git に固定する。
  • ローカル HTTP GW からの偽 502—ワーカ子が spawn できず、多くは RLIMIT_NPROC

launchd と対話シェル:別物の ulimit 宇宙

SSH セッションは ~/.zprofileulimit -n 65535 を実行していることがあるが、LaunchAgent は plist に書かない限り複製されない。必ず plist が呼ぶ 同一ラッパースクリプト 内で上限を印字し、ノートのローカルシェルから推測しない。

コンテキスト典型 maxfiles設定主体リスク
SSH ログイン10240+シェル rclaunchd デバッグを誤誘導
LaunchAgent 既定256〜1024OS 既定MCP バーストで即枯渇
plist SoftResourceLimits 後8192〜65535運用チームコード側 FD 衛生と一致必須

ページに値するテレメトリ閾値

既存の ヘルスプローブ に毎分三値を syslog 追記する:空きページファイル記述子数コンプレッサページ。連続二サンプルでいずれかが跨いだら当番へ。

ルール束:16GB SKU で空き RAM 2.5GB 未満、開 FD 8000 超、またはコンプレッサページ 120000 超—24GB 機では比例調整する。

Plist 断片:launchd を fork 爆弾にしない SoftResourceLimits

キーはエージェント辞書直下に置き、グローバルドメインに書かない。ハード上限はソフトの 1.25 倍 以内に抑え、誤設定は速やかに失敗させてウェッジを避ける。

<key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key><integer>8192</integer> <key>NumberOfProcesses</key><integer>512</integer> <key>Stack</key><integer>8388608</integer> </dict>

launchctl kickstart -k gui/$(id -u)/com.example.openclaw は二つ目の SSH セッションを確保してから実行する—手順は ゲートウェイ再起動リカバリ と同じ規律を流用する。

並列ガイド の各エージェントはモデルハンドルと MCP ソケットを複製する。ラボで並列を倍にしたとき RSS が 3.2GB 増えるなら、安易に NumberOfFiles だけ倍にして漏れを隠さない。macOS ベースラインサービス控除後の物理 RAM の 70% に RSS が収まるまで並列を絞る。

シークレット注記:OpenClaw に RLIMIT_MEMLOCK を上げても効きにくい—キーチェーン優先の秘匿 を維持し、mmap 巨大キャッシュに逃げない。

FAQ

上限確保のため root で OpenClaw を動かすべきか。 いいえ—plist を直す。root はブラスト半径だけ広がる。

Activity Monitor で足りるか。 スポットチェックには足りるが、夜間退行は自動 memory_pressure ログで捕える。

Docker サイドカーは。 同居するなら 70% 予算からコンテナ RSS を先に減算する。

リソース偏重 OpenClaw に Apple Silicon Mac mini が残る理由

M4 の UMA はモデル重みと macOS サービスが帯域を共有しても安価 x86 VM に多い PCIe NUMA 驚きが少ない。料金 単位でリージョン課金を揃えられ、24GB SKU へ上げれば上限ではなく並列度の設計余地が増える。native launchd は Linux コンテナが「Mac っぽさ」を装うより運用が素直である。plist 版は GitOps のコミット横に記録し、オンボーディングに本稿をリンクし、ワークロード終了時に mini を返却すれば—金属が予測可能なら上限談義も単純になる。

OpenClaw のハードを適正化

香港・日本・韓国・シンガポール・米国の Mac mini で余白付き自動化