ホーム チュートリアル カテゴリ Skills サイトについて
ZH EN JA KO
運用監視

OpenClawパフォーマンス最適化とリソース使用量の制御

· 14 分で読了

はじめに

OpenClaw は長時間稼働するAIゲートウェイデーモンプロセスであり、リソース使用量はサーバーコストとサービスの安定性に直接影響します。本記事では、メモリ、CPU、ネットワーク、ストレージの4つの観点から、OpenClawのリソース使用量を最適化する方法を体系的に解説します。限られたリソースの中でサービスを効率的に運用しましょう。

一、メモリ最適化

1.1 メモリ消費の内訳

OpenClaw のメモリ消費は主に以下から生じます。

  • 会話履歴キャッシュ:各アクティブユーザーの会話コンテキスト
  • チャンネル接続プール:各メッセージングプラットフォームのWebSocket長時間接続
  • スキルランタイム:ロード済みのスキルモジュール
  • リクエストキュー:処理待ちメッセージのバッファ

現在のメモリ使用状況を確認します。

# ヘルスチェックエンドポイント経由
curl -s http://localhost:18789/health/detail | jq '.memory'

# 出力例
# {
#   "heapUsed": "128MB",
#   "heapTotal": "256MB",
#   "rss": "310MB",
#   "external": "15MB"
# }

1.2 Node.jsヒープメモリの制限

NODE_OPTIONS 環境変数でV8エンジンの最大ヒープメモリを制御します。

// ~/.config/openclaw/openclaw.json5
{
  "runtime": {
    "nodeOptions": "--max-old-space-size=384"  // 単位:MB
  }
}

または環境変数で設定します。

export NODE_OPTIONS="--max-old-space-size=384"
openclaw restart

推奨値:

サーバーメモリ 推奨ヒープメモリ制限 適用シナリオ
512MB 256MB 個人利用、1-2チャンネル
1GB 384MB 小規模チーム、3-5チャンネル
2GB 512MB 中程度の負荷、マルチチャンネル
4GB+ 1024MB 高負荷本番環境

1.3 会話履歴長の制御

会話履歴はメモリ消費の主な要因です。各ユーザーの履歴が長いほど、API呼び出しごとのトークン消費とメモリ使用量が大きくなります。

// ~/.config/openclaw/openclaw.json5
{
  "conversation": {
    // 保持する最大会話ターン数
    "maxHistory": 20,
    // 最大トークン数制限(超過時は古いメッセージを自動的に切り捨て)
    "maxTokens": 8000,
    // 会話タイムアウト(この時間非アクティブの場合、履歴をクリア)
    "idleTimeout": "30m"
  }
}

リソースが制限された環境では、さらに圧縮できます。

{
  "conversation": {
    "maxHistory": 10,
    "maxTokens": 4000,
    "idleTimeout": "15m",
    // 履歴要約圧縮を有効化:制限超過時に古い会話を自動的に要約に圧縮
    "summarize": true
  }
}

1.4 メモリキャッシュ戦略

{
  "cache": {
    // ユーザープロファイルキャッシュサイズ
    "userProfileMaxSize": 100,
    // スキル結果キャッシュの有効期限
    "skillResultTTL": "5m",
    // 最大キャッシュエントリ数
    "maxEntries": 500
  }
}

二、CPU最適化

2.1 同時リクエスト数の制限

同時に処理するリクエストが多すぎるとCPUが急上昇し、応答遅延が増加します。キューで同時実行を制御します。

{
  "gateway": {
    // 最大同時モデルリクエスト数
    "maxConcurrentRequests": 5,
    // リクエストキューの最大長
    "queueMaxSize": 50,
    // キュー内での待機タイムアウト
    "queueTimeout": "30s"
  }
}

2.2 スキルロードの最適化

不要なスキルはCPUとメモリリソースを消費します。実際に使用するスキルのみをロードしましょう。

{
  "skills": {
    // 有効にするスキルを明示的に指定(すべてをロードしない)
    "enabled": ["weather", "reminder", "rss"],
    // スキル実行タイムアウト
    "timeout": 10000,
    // スキル結果キャッシュ(重複計算を削減)
    "cache": true
  }
}

2.3 SystemdのCPUクォータを使用する

Systemd で OpenClaw を管理している場合、CPUの使用をハード制限できます。

# /etc/systemd/system/openclaw.service
[Service]
CPUQuota=50%          # 最大50%のCPUに制限
CPUWeight=80          # スケジューリング重み(100が標準)

2.4 PM2クラスターモード

マルチコアサーバーでは、PM2のクラスターモードで負荷を分散します。

// openclaw-ecosystem.config.js
module.exports = {
  apps: [{
    name: "openclaw",
    script: "openclaw",
    args: "up",
    instances: 2,          // 2インスタンスを起動
    exec_mode: "cluster",
    max_memory_restart: "400M"
  }]
};

注意:クラスターモードではOpenClawがマルチインスタンス実行をサポートしている必要があり、共有セッションストレージが設定されていることを確認してください。

三、モデル呼び出し最適化

3.1 適切なモデルの選択

モデルの選択は応答速度とコストに直接影響します。

{
  "model": {
    // 日常会話には軽量モデルを使用
    "default": "claude-3-5-haiku",
    // 複雑なタスクには高性能モデルを使用
    "advanced": "claude-3.5-sonnet",
    // メッセージの複雑さに応じて自動切り替え
    "autoSwitch": true,
    "autoSwitchThreshold": 100  // 入力が100文字を超えた場合に高性能モデルを使用
  }
}

3.2 ストリーミングレスポンスの有効化

ストリーミングレスポンスは初回バイトの遅延を減らし、ユーザー体験を向上させます。

{
  "model": {
    "stream": true,
    // ストリーミングチャンク送信間隔(ストリーミング非対応チャンネル向け)
    "streamChunkInterval": 500
  }
}

3.3 リクエストタイムアウトの設定

異常なリクエストが長時間リソースを占有するのを防ぎます。

{
  "model": {
    "timeout": 30000,     // 単一リクエストタイムアウト 30秒
    "maxRetries": 2,      // 最大リトライ回数
    "retryDelay": 2000    // リトライ間隔 2秒
  }
}

四、ストレージとネットワークの最適化

4.1 ログファイルの制御

ログファイルの肥大化はディスクスペースを大量に消費します。

{
  "log": {
    "level": "info",        // 本番環境ではdebugを使わない
    "rotation": {
      "maxSize": "30MB",
      "maxAge": 14,         // 14日間保持
      "compress": true
    }
  }
}

4.2 セッションデータのクリーンアップ

期限切れのセッションデータを定期的にクリーンアップします。

# セッションデータの使用量を確認
du -sh ~/.openclaw/sessions/

# 30日以上非アクティブなセッションをクリーンアップ
openclaw session cleanup --older-than 30d

# 自動クリーンアップを設定
openclaw config set session.autoCleanup true
openclaw config set session.cleanupInterval "24h"
openclaw config set session.maxAge "30d"

4.3 ネットワーク接続の最適化

{
  "gateway": {
    // HTTP Keep-Alive タイムアウト
    "keepAliveTimeout": 30000,
    // コネクションプールサイズ
    "maxSockets": 20,
    // gzip圧縮を有効化
    "compression": true
  }
}

五、パフォーマンス監視とベンチマーク

5.1 組み込みパフォーマンス指標

# ランタイムパフォーマンス統計を表示
curl -s http://localhost:18789/health/stats | jq .

# 返却例
# {
#   "avgResponseTime": "1.8s",
#   "p95ResponseTime": "3.2s",
#   "messagesPerMinute": 12,
#   "activeConnections": 3,
#   "queueLength": 0
# }

5.2 リソース使用トレンド

Prometheus指標と組み合わせて、リソース使用トレンドを監視します。

# 過去24時間のメモリトレンドを表示
openclaw stats --metric memory --period 24h

# 応答時間トレンドを表示
openclaw stats --metric latency --period 7d

5.3 最適化効果の検証

設定を調整した後は、少なくとも24時間以下の指標を観察することをお勧めします。

指標 正常範囲 要注意
ヒープメモリ使用率 < 70% > 85%
平均応答時間 < 3s > 5s
エラー率 < 1% > 5%
CPU使用率 < 40% > 70%
キュー長 0-5 > 20

六、低スペックサーバー向け最適化設定

512MBメモリのエントリーレベルVPS向けに、以下の最大限の最適化設定を推奨します。

{
  "runtime": {
    "nodeOptions": "--max-old-space-size=256"
  },
  "conversation": {
    "maxHistory": 8,
    "maxTokens": 3000,
    "idleTimeout": "10m",
    "summarize": true
  },
  "gateway": {
    "maxConcurrentRequests": 2,
    "queueMaxSize": 20
  },
  "model": {
    "default": "claude-3-5-haiku",
    "stream": true,
    "timeout": 20000,
    "maxRetries": 1
  },
  "skills": {
    "enabled": [],
    "cache": true
  },
  "log": {
    "level": "warn",
    "rotation": {
      "maxSize": "10MB",
      "maxAge": 7
    }
  }
}

これらの最適化により、OpenClawは512MBメモリのサーバーでも安定して動作し、許容範囲内の応答速度を維持できます。実際の負荷に応じてパラメータを段階的に調整し、パフォーマンスとリソースの最適なバランスを見つけてください。

OpenClawは無料のオープンソースAIアシスタント。WhatsApp、Telegram、Discordなど多数のプラットフォームに対応