はじめに
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メモリのサーバーでも安定して動作し、許容範囲内の応答速度を維持できます。実際の負荷に応じてパラメータを段階的に調整し、パフォーマンスとリソースの最適なバランスを見つけてください。