AI Frontier

2026 年 OpenClaw ゲートウェイのツール呼び出し並列、ファイル記述子予算、macOS ulimit 調整:ワーカープール、信号量、LaunchAgent SoftResourceLimits、EMFILE 予防、トークン絞り・doctor 診断・クラウド Mac mini 負荷試験との連携

MacHTML Lab2026.04.30約 34 分で読める

MCP 風ツールを子プロセスで呼び出す OpenClaw ゲートウェイは、やがて EMFILE に直面する。原因は OS の意地悪ではなく、並列度 ×(パイプ・ソケット・ログ)がプロセス単位のファイル記述子テーブルを想定より速く埋めるからだ。2026 年は 境界付きワーカー信号量 と正直な ulimit -n 余白を同一 runbook に書き、トークン予算とツール絞りおよび openclaw doctor ゲートウェイ診断と整合させよう。そうすれば並列スパイクが上流障害に見えなくなる。

本稿のガードレール:8 GiB Mac mini ではゲートウェイワーカーあたり子プロセス並列の既定を 8、HTTP スタックとメトリクスに 256 記述子を予約。本番テナントに触れる前に、1 日あたり約 $16.9 のレンタル Apple ハードで検証する。

プロセスモデルと隠れ FD 消費

子プロセスは標準ストリーム三套を継承し、PTY を噛ませると複製が増える。モデル提供者ソケット、Prometheus スクレイプ、任意の WebSocket、ローテログ、SQLite/Redis が加わる。単純な 32 並列 でもユーザー処理の前に 1000 超の記述子を消費し得る。統合チャネルごとの長寿命接続数を設計レビュー表に書くと、メトリクスクライアントとキューが同じ FD 予算を奪い合う事故を防げる。

ワーカー信号量と公平キュー

ツール実行器を囲む計数信号量を一本化し、exec 前に取得、シグナル取消を含む解放パスで返却。テナント内は FIFO を優先し、インシデント用ジョブには重み付き優先度を。

プロファイル並列上限根拠
ファイル読取12Apple NVMe QD のスイートスポット
ネットクローラ6TLS ソケットは追加 FD
CPU コンパイル性能コア数の 2 倍熱制限が先に来る

macOS ソフト/ハード上限

変更前後で launchctl limit maxfiles を実行。対話シェルはソフト 256 既定のことが多く、サーバはソフト 10240 を要する。両方を runbook 冒頭に明記し、profile だけ直すミスを防ぐ。

LaunchAgent plist SoftResourceLimits

SoftResourceLimitsNumberOfFiles は信号量計算に 20% のバースト余裕を足す。ThrottleInterval で誤設定時の exec 嵐を抑える。

記述子リークの早期検出

ソーク中は 60 秒 ごとに lsof -p $GATEWAY_PID をサンプリングし CLOSE_WAIT を差分。ソフト上限の 70%5 分 超えたらアラート。直近 3 リリースのハッシュを添付すると原因切り分けが速い。

IO 境界と CPU 境界

マニフェストに io_bound / cpu_bound を付け、スケジューラが別信号量を適用。単一上限だとシェルユーティリティが長時間 ffmpeg に飢える。

キュー深さとバックプレッシャ

gateway_tool_queue_depth をゲージ化し、p95 が 5010 分 超えたら異常。構造化ログにキュー位置を出し、SSH なしでも説明可能にする。

ロールアウトチェックリスト

  1. 本番親 PID の ulimit -n をスナップショット。
  2. ステージングで先に並列を下げ p95 を測定。
  3. 72 時間 リーク退行が無いことを証明してからソフト上限を上げる。
  4. doctor でチャネル疎通を再確認。

共有 Mac mini のマルチテナント

Unix グループや環境名前空間で信号量を分割し、暴走テナントが全体を食いつぶすのを防ぐ。対話セッション用に最低 30% を予約し、財務にはインシデントバッファとして計上する。

ベンチハーネスの期待値

合成負荷は 5 分 ごとに並列 +4 で段階上げし、CPU パッケージ電力とファンDutyを記録。GPU 常駐とツールが衝突すると Apple Silicon は早めにサーマルスロットルする。

絞りと 429 の協調

高並列は上流レートリミットを増幅する。トークン絞りの記事参照。429 が跳ねたら先に並列を下げ、その後バックオフを伸ばすと体感レイテンシが両方改善する。

オブザーバビリティとオンコール

ヒストグラムに exemplar を付け、並列ツール数と FD を相関。着信後 5 分 で「多すぎ」と「リーク」を切り分ける。

サンドボックス相互作用

Seatbelt が IPC の FD を複製すると上限が二重計上されることがある。ステージングでプロファイルを検証してから本番で caps を厳格化する。

ドキュメントドリフト

ツール家族ごとの既定信号量を単一 Markdown 表で管理。陳腐化すると運用がリーク修正より ulimit 引き上げを選びがちで監査に不利。

vnode と一時ディレクトリ

/var/folders 下に大量スクラッチを作ると FD が健康でも vnode が先に詰まる。CI で sysctl vfs.numvnodes を監視し、明示的バルク展開以外はジョブあたり 10000 ファイル上限。

kqueue ウォッチ

ワークスペース監視はパスごとに記述子が必要。5000 超の追跡ファイルでは再帰監視を単一根+ユーザー空間フィルタに畳む。

gRPC と HTTP/2

多重ストリームもウィンドウを食う。接続あたりの outbound ストリームは 100 未満を目安にし、SETTINGS フレーム churn で効率コア CPU が跳ねるのを避ける。

Redis プール

スレッドごと接続は 8 GiB ホストでは最大 32 共有接続にプールし、TLS セッション再開を確認。再接続嵐で握手回数が FD に乗る。

ローリング再起動

新旧バイナリ重複で記述子が一時二倍。メンテ中はソフト上限 +15% か、2 スクレイプ間だけ並列縮小。

サポートマクロ

「開きすぎ」チケットには openclaw doctor、信号量上限、plist キーを定型文で。成熟環境では重複チケットが約 40% 減る例がある。

キャパシティ表の出発点

最悪ケースは (workers × tools_parallel × (3 パイプ + 2 ログ + 2 ソケット)) + fixed_overhead8×8 で固定分だけでも 1500 に迫る——plist 選定前に 25% バッファ。新統合のたびに長寿命接続が増えるので四半期レビュー。

財務承認はリーク修正チケットとセット。硬上限だけ上げるのは債務の先送りに見える。

SLO ダッシュボード横に数値を掲示し、大規模ローンチや監査、連休スパイク、ベンダメンテ前に「並列倍増」を断る理由を共有する。

MacHTML の Apple Silicon Mac mini レンタルは、本番に近い launchd 継承と静かな持続負荷で信号量検証に向く。約 $16.9/日 で容量実験を OpEx 化しつつ、ファイルテーブルを root レベルで観測できる。

弾力あるレンタル期間により、FD 回帰調査を他チームの共有ステージングに触れず隔離ホストで複製できる。

本物の macOS で OpenClaw 並列をリハーサル

クラウド Mac mini を借り、本番級負荷で ulimit・LaunchAgent・信号量を検証。

ゲートウェイ並列を最適化
$16.9/日から