linux-cgroups について
linux-cgroupsは、Linux cgroups v2を使って複数のOpenClawインスタンスを管理するためのスキルです。メモリとCPUの制限、OOM保護、systemdスライスによるプロセス管理を扱います。
主な機能
- 01メモリ上限の設定
- 02CPUクォータの設定
- 03OOM保護の有効化
- 04systemdスライスによるプロセス分類
- 05cgroup内でのプロセス起動
活用シーン
- 01OpenClawインスタンスのメモリ制限
- 02複数インスタンス間のCPU配分
- 03共有ホストでのリソース枯渇防止
- 04本番環境でのプロセスリソース分離
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill linux-cgroupsインストール後、Claude Code で/linux-cgroupsを入力して読み込まれたか確認します。
詳細
linux-cgroups
目的
このスキルは、Linux cgroups v2 を使用して OpenClaw インスタンスのリソースを正確に管理します。メモリ制限、CPU クォータ、OOM(メモリ不足)保護、systemd スライスに重点を置き、マルチプロセスシステムでのリソース枯渇を防ぎ、パフォーマンスを最適化します。
使用するタイミング
Linux サーバーで複数の OpenClaw インスタンスを実行し、リソースを分離したり、負荷の高いタスクに制限を適用したり、本番環境での OOM による強制終了を防いだりする場合に、このスキルを使用します。コンテナーや仮想化環境など、ホストを共有するシナリオで適用し、CPU とメモリを公平に割り当てます。
主な機能
- メモリ制限を設定して、OpenClaw インスタンスごとの使用量を上限以下に抑えます。たとえば、スワップを防ぐために
memory.maxを使用します。 cpu.maxを使用して CPU クォータを適用し、CPU 帯域幅を制御して CPU 時間の割り当てを制限します。memory.oom.groupによる OOM 保護を有効にして、プロセスに優先順位を付け、突然の終了を防ぎます。- systemd スライスを管理して階層的にリソースをグループ化し、複雑な構成で cgroups を入れ子にできるようにします。
使用パターン
cgroups を適用するには、cgroup 階層を作成し、制限を設定して、プロセスを割り当てます。必ず root または十分な権限を持つユーザーとして実行してください。OpenClaw では、インスタンスの起動を cgroup コンテキストでラップし、インスタンスごとの制限を適用します。例として、OpenClaw 用のスライスを作成し、プロセスを割り当てます。自動化には Bash スクリプトを使用し、v2 の cgroup パスが /sys/fs/cgroup/ 以下にあることを確認します。
主なコマンド/API
CLI ツール、またはファイルシステムを直接操作して cgroups を管理します。API キーは不要です。システムレベルのアクセスを使用します。
- CLI コマンド:
- cgroup を作成します:
sudo cgcreate -g memory,cpu:/openclaw_slice - メモリ制限を設定します:
sudo cgset -r memory.max=512M /openclaw_slice(512 MB に制限) - CPU クォータを設定します:
sudo cgset -r cpu.max=100000 50000 /openclaw_slice(CPU コア 1 個の使用率を 50% に制限) - cgroup 内でプロセスを実行します:
sudo cgexec -g memory,cpu:/openclaw_slice openclaw --run task
- cgroup を作成します:
- コードスニペット(Bash または Python):
# Bash example to set and apply memory limit sudo cgcreate -g memory:/openclaw sudo cgset -r memory.max=1G /openclaw sudo cgexec -g memory:/openclaw openclaw --instance id1# Python snippet using subprocess (requires root) import subprocess subprocess.run(['cgcreate', '-g', 'memory:/openclaw']) subprocess.run(['cgset', '-r', 'memory.max=1G', '/openclaw']) subprocess.run(['cgexec', '-g', 'memory:/openclaw', 'openclaw', '--instance', 'id1']) - 設定形式:cgroup ファイルを直接編集します。たとえば、
/sys/fs/cgroup/your_slice/memory.maxに値を echo します。systemd の場合は、[Slice]\nMemoryMax=512Mのように、/etc/systemd/system/以下の.sliceファイルでスライスを定義します。
統合に関する注意
コマンドを cgroup 内で実行するようにラップして OpenClaw と統合します。たとえば、起動スクリプトを変更して cgexec を含めます。ホストで cgroups v2 が使用されていることを確認してください(stat /sys/fs/cgroup/unified で確認できます)。v1 の場合は、systemctl を使用して移行します。複数インスタンスの構成では、OPENCLAW_CGROUP_PATH=/openclaw_slice などの環境変数を使用して cgroup の情報を渡します。systemd-cgtop または cat /sys/fs/cgroup/your_slice/memory.current で使用状況を監視します。
エラー処理
よくあるエラーには、権限拒否(sudo で解決)、無効な cgroup パス(ls /sys/fs/cgroup/ で確認)、OOM イベント(dmesg | grep -i oom でログを確認)などがあります。次のように対処します。
- スクリプトで戻り値を確認します:
if [ $? -ne 0 ]; then echo "Cgroup creation failed"; fi - メモリプレッシャーを監視します:
cat /sys/fs/cgroup/your_slice/memory.oom_controlを使用し、OOM が発生した場合にアラートを出します。 - デバッグ:systemd スライスの場合は
systemctl status your_sliceを実行します。次のようなコード内のエラーを解析します:try: subprocess.run(['cgset', '-r', 'memory.max=1G', '/openclaw'], check=True) except subprocess.CalledProcessError as e: print(f"Error: {e.returncode} - {e.output}")
具体的な使用例
- 単一の OpenClaw インスタンスのメモリを制限する:cgroup スライスを作成し、メモリ上限を 2GB に設定して、インスタンスを実行します。コマンドの実行順:
sudo cgcreate -g memory:/openclaw_inst1; sudo cgset -r memory.max=2G /openclaw_inst1; sudo cgexec -g memory:/openclaw_inst1 openclaw --instance inst1 --task process_data。これにより、インスタンスのメモリ使用量が 2GB を超えないようにし、ほかのプロセスの OOM を防ぎます。 - 複数のインスタンスに CPU クォータを適用する:OpenClaw タスクのグループに CPU 制限を設定します。例:
sudo cgcreate -g cpu:/openclaw_group; sudo cgset -r cpu.max=200000 100000 /openclaw_group; sudo cgexec -g cpu:/openclaw_group openclaw --instance inst2 --task compute_loop。これにより、CPU コア 2 個分のクォータを、それぞれ 50% の使用率で適用し、インスタンス間のパフォーマンスのバランスを確保します。
グラフの関係性
- 関連項目:linux(クラスター)。Linux のコアとなるリソース管理を基盤としているためです。
- タグによる関連:cgroups(直接)、memory(機能)、limits(特徴)、performance(結果)。
- 他のスキルへのリンク:cpu-management(より詳細な CPU 制御)、oom-handler(高度な OOM 戦略)。