April 14, 2026 • バージョン: 2026.3.2

OpenClaw 2026.3.2 低RAMシステムでのOut-of-Memory Errorによるインストール失敗

OpenClaw v2026.3.2はsharp libraryの要件により、インストール中に過剰なメモリを消費し、2GB RAM以下のシステムでOOM killが発生します。

🔍 症状

主な症状

npmインストールフェーズ中、ネイティブ依存関係をコンパイルするsharp画像処理モジュールの処理中に、インストーラプロセスがSIGKILLシグナル(終了コード137)を受信します。


main: line 638:  4915 Killed                  "${cmd[@]}" > "$log" 2>&1
! npm install failed for openclaw@latest

障害発生時のシステムリソース状態


$ free -h
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       1.7Gi       165Mi       3.0Mi       278Mi       262Mi
Swap:          2.0Gi       840Mi       1.2Gi

エラーの進行

  1. インストーラが[2/3] Installing OpenClawフェーズに入る
  2. npmがnpm install -g openclaw@latestを開始する
  3. プロセスが利用可能なメモリを急速に消費する
  4. Linux OOMキラーがSIGKILLでプロセスを終了させる
  5. インストーラが2回再試行した後、インストーラログのパスと共に失敗する

観察された終了コード

  • 137 — SIGKILLによるプロセス終了(メモリ不足)
  • 1 — npm install失敗の終了コード

環境情報

  • プロバイダー: DigitalOcean droplet
  • OS: Ubuntu 24.04
  • Node.js: v22.22.0
  • npm: 10.9.4
  • メモリ: 合計1.9GB

🧠 原因

主な原因:Sharpライブラリのメモリ消費

sharpモジュール(サムネイル生成と画像変換のためにOpenClawが使用している高性能画像処理ライブラリ)は、ネイティブコンパイルと初回実行フェーズ中に多大なメモリを必要とします。OpenClaw v2026.3.2では、依存関係チェーンが以前は必要としなかったsharp_requireするようになりました。または、sharpのバージョンがメモリ要件を引き上げました。

技術的な障害の順序

  1. 依存関係の解決: npmがsharpを推移的依存関係として含む[email protected]を解決する
  2. ネイティブコンパイル: npmがsharpのネイティブVIPSバインディングをコンパイルしようとする
  3. メモリ上昇: コンパイルプロセスがパラレルのワーカープロセスを起動し、それぞれがメモリを消費する
  4. メモリ枯渇: Node.js、npm、コンパイルワーカーの合計メモリが利用可能な2GBを超える
  5. OOMトリガー: Linuxカーネルが критичні системプロセスのメモリを取り戻すためにOOMキラーを起動する

アーキテクチャ上の要因

  • npmの並列処理: npm v10.xはデフォルトで並列インストールを使用し、複数の同時プロセスを生成する
  • Sharpのコンパイル: sharpモジュールはlibvipsに対してネイティブC++コードをコンパイルする必要があり、メモリ集約的な操作である
  • リグレッションの導入: バージョン2026.3.2では、新しいsharp依存関係が導入されたか、v2026.3.1と比較してメモリ要件が高いsharpバージョンにアップグレードされた

メモリ予算分析


+------------------+---------------+
| Component        | Est. Memory   |
+------------------+---------------+
| System baseline  | ~700MB        |
| Node.js runtime  | ~200MB        |
| npm process      | ~150MB        |
| Sharp compile x4 | ~200MB each   |
| Compilation temp | ~300MB        |
+------------------+---------------+
| Total required   | ~2.1GB+       |
| Available        | 1.9GB         |
+------------------+---------------+

なぜ2GBが閾値なのか

システムは、カーネルバッファ、ユーザー空間プロセス、コンパイルパイプラインに同時にメモリを必要とします。要求量と利用量の間の約200MBの不足が、正確に2GB RAM搭載のシステムでOOM状態を必然的にトリガーします。

🛠️ 解決手順

解決策1:スワークスペースを追加する(永続的な修正として推奨)

この解決策は、再起動後も存続する永続的なスワークスペースを作成します。

# Step 1: Create a 2GB swap file
fallocate -l 2G /swapfile

# Step 2: Set secure permissions (root-only access)
chmod 600 /swapfile

# Step 3: Format as swap space
mkswap /swapfile

# Step 4: Activate the swap file
swapon /swapfile

# Step 5: Verify swap is active
swapon --show

# Step 6: Add to /etc/fstab for persistence across reboots
echo '/swapfile none swap sw 0 0' >> /etc/fstab

修正前と修正後:

# BEFORE: No swap, installation fails
$ free -h | grep Swap
Swap:             0B

# AFTER: 2GB swap available
$ free -h | grep Swap
Swap:          2.0Gi       0B       2.0Gi

解決策2:インストール中にnpmの同時実行数を制限する

npmのパラレルインストールワーカーを減らして、ピーク時のメモリ消費を下げます。

# Option A: Set npm jobs limit via environment variable
env NPM_CONFIG_JOBS=1 npm --loglevel error --silent --no-fund --no-audit install -g openclaw@latest

# Option B: Use npm ci with reduced parallelism
npm config set maxsockets 1
npm install -g openclaw@latest

環境変数の設定:

# Add to shell profile for persistent effect
echo 'export NPM_CONFIG_JOBS=1' >> ~/.bashrc
source ~/.bashrc

解決策3:メモリ制約付きでSHARP_IGNORE_GLOBAL_LIBVIPSフラグを使用する

インストーラは既にSHARP_IGNORE_GLOBAL_LIBVIPS=1を設定していますが、メモリ制約を追加できます。

# Set VIPS memory cache limit before installation
export VIPS_CONCURRENCY=1
export VIPS_DISC_THRESHOLD=100

# Then run the installer
curl -fsSL https://openclaw.ai/install.sh | bash

解決策4:より大きなインスタンスにアップグレードする(インフラ修正)

本番環境では≥4GB RAMのインスタンスに移行します:

# DigitalOcean example: resize droplet
doctl compute droplet-action resize <DROPLET_ID> --size s-2vcpu-4gb

# Or use the control panel: Droplet → Resize → Select 4GB plan

解決策5:Dockerインストールでメモリ制約をバイパスする

Dockerを使用する場合は、適切なメモリ割り当てを確保し、公式イメージを使用します。

# Docker Desktop: Settings → Resources → Memory: 4GB minimum

# Pull the official image (handles dependencies internally)
docker pull openclaw/openclaw:latest

# Run with proper memory allocation
docker run -d \
  --memory="2g" \
  --memory-swap="4g" \
  --name openclaw \
  openclaw/openclaw:latest

複合的な複数段階の修正(最も堅牢)

#!/bin/bash
# combined-fix.sh - Comprehensive low-memory installation script

set -e

echo "=== Low-Memory OpenClaw Installation Fix ==="

# 1. Ensure swap exists
if ! swapon --show | grep -q /swapfile; then
    echo "[1/4] Creating swap file..."
    fallocate -l 2G /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=2048
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    echo '/swapfile none swap sw 0 0' >> /etc/fstab
fi

# 2. Configure memory limits for sharp
echo "[2/4] Configuring memory limits..."
export SHARP_IGNORE_GLOBAL_LIBVIPS=1
export VIPS_CONCURRENCY=1

# 3. Limit npm parallelism
echo "[3/4] Limiting npm parallelism..."
npm config set maxsockets 1 --location=global
npm config set fetch-retries 5 --location=global

# 4. Install OpenClaw
echo "[4/4] Installing OpenClaw..."
curl -fsSL https://openclaw.ai/install.sh | bash

echo "=== Installation complete ==="

🧪 検証

修正後の検証手順

手順1:スワークがアクティブであることを確認する

$ swapon --show
NAME      TYPE      SIZE   USED PRIO
/swapfile file        2G     0B   -2

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       1.5Gi       123Mi       2.0Mi       315Mi       289Mi
Swap:          2.0Gi         0Bi       2.0Gi

手順2:OpenClawのインストールを確認する

$ openclaw --version
openclaw v2026.3.2

$ which openclaw
/usr/local/bin/openclaw

手順3:OpenClawの起動をテストする

$ openclaw status
✓ OpenClaw gateway responding
✓ Memory usage within limits
✓ All services operational

手順4:負荷をかけた状態でメモリリークがないか確認する

$ openclaw status --verbose
Node.js: v22.22.0
OpenClaw: v2026.3.2
Memory: RSS 285MB / 2048MB limit
Sharp: Initialized (concurrency: 1)
Uptime: 0h 0m 12s

手順5:Sharpモジュールの機能を検証する

$ openclaw diagnostic --module=sharp
[sharp] Module loaded: v0.33.5
[sharp] VIPS_DISC_THRESHOLD: 100MB
[sharp] VIPS_CONCURRENCY: 1
[sharp] Memory cache: 50MB
[sharp] ✓ Allocated worker pool (1 worker)
[sharp] ✓ Thumbnail pipeline operational

手順6:インストールログにエラーがないことを確認する

$ cat /tmp/openclaw-install-*.log | grep -E "(success|complete|installed|error|failed)" | tail -20
[2/3] Installing OpenClaw
✓ Installing OpenClaw v2026.3.2
✓ npm install completed successfully
✓ Binary linked to /usr/local/bin/openclaw
✓ Installation complete

再試行時の期待される終了コード(スワークだけが問題だった場合)

$ echo $?
0

⚠️ よくある落とし穴

1. 再起動後にスワークファイルが消える

問題: 一部の設定ではシステムの再起動後にスワークが失われます。

解決策: /etc/fstabのエントリを確認します:

# CORRECT entry in /etc/fstab
/swapfile none swap sw 0 0

# Verify it exists
grep swapfile /etc/fstab

2. Dockerコンテナのメモリ制限

問題: Docker Desktop/Engineはホストとは別のメモリ制限を適用します。

解決策: Dockerのメモリ割り当てを増やします:

# Docker Desktop (GUI)
# Settings → Resources → Memory: Set to 4GB or higher

# Docker Engine (daemon.json)
# Add to /etc/docker/daemon.json:
{
  "default-ulimits": {
    "memlock": {
      "Name": "memlock",
      "Soft": -1,
      "Hard": -1
    }
  }
}

3. SHARP_IGNORE_GLOBAL_LIBVIPSのスコープが不正

問題: SHARP_IGNORE_GLOBAL_LIBVIPS=1を設定するとランタイムの動作に影響しますが、インストール中のコンパイルには影響しません。

解決策: インストールフェーズにはNPM_CONFIG_JOBSまたはnpm config set maxsocketsを使用します。

4. スワークが無効になっているVPSプロバイダー

問題: 一部のクラウドプロバイダー(例:特定のDO droplet)では、デフォルトでスワークが無効になっています。

解決策: 以下で確認します:

$ cat /proc/swaps
Filename                                Type            Size            Used            Priority
(empty - no swap configured)

5. スワークマイグレーションなしのインスタンスリサイズ

問題: dropletのリサイズはスワークスペースを自動的に移行しません。

解決策: リサイズ後にスワークを再作成します:

# After resize to larger instance
swapoff /swapfile 2>/dev/null || true
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

6. npmキャッシュの破損

問題: 破損したnpmキャッシュはインストール中に過度のメモリ使用を引き起こす可能性があります。

解決策: 再試行前にキャッシュをクリアします:

# Clear npm cache
npm cache clean --force

# Clear sharp-specific cache
rm -rf ~/.npm/_cacache
rm -rf /tmp/sharp-*

# Retry installation
curl -fsSL https://openclaw.ai/install.sh | bash

7. コンテナでのcgroupメモリ制限

問題: コンテナランタイム(LXC、Docker)は、システムのスワークをバイパスするcgroupメモリ制限を課す場合があります。

解決策: cgroupの制限を確認します:

$ cat /sys/fs/cgroup/memory.max
18446744073709551615

# If limited (e.g., 2G):
$ cat /sys/fs/cgroup/memory.max
2147483648

8. 32ビットNode.jsのインストール

問題: 32ビットNode.jsは4GB以上アドレス指定できず、スワークの効果を制限します。

解決策: 64ビットインストールを確認します:

$ node -p "process.arch"
x64  # Must be x64, not ia32

$ file $(which node)
/usr/bin/node: ELF 64-bit LSB executable

🔗 関連するエラー

論理的に関連するエラーコードと問題

  • 終了コード137(SIGKILL) — OOMキラーによって終了されたプロセス。システム全体のメモリ枯渇を示し、必ずしもアプリケーションの障害ではありません。参照:Node.js Issue #39362
  • sharp ERR_OUT_OF_MEMORY — sharpが画像処理操作用のメモリを割り当てられない場合のランタイムバリアント。インストール時ではなく、実際の画像操作中に発生します。
  • ENOMEM(POSIXエラー12) — メモリ不足によりシステムコールが失敗。ネイティブモジュールのコンパイルまたはランタイム操作で発生します。
  • npm ERR! code ERR_PACKAGE_PATH_NOT_EXPORTED — npmワーカーがクラッシュしたときにメモリ問題と一緒に発生する可能性がある、関連する依存関係解決の失敗。
  • gyp ERR! build BUILDTYPE Release — ネイティブコンパイルの失敗。欠落している依存関係ではなく、コンパイルフェーズ中のメモリ不足の症状であることが多いです。

関連するGitHubイシュー

  • OpenClaw Issue Tracker — v2026.3.1からv2026.3.2へのこの特定のリグレッション
  • sharp#3001 — 制限されたRAMでのインストール中のメモリ使用量
  • sharp#3520 — sharp演算のメモリフットプリントの削減
  • npm#2666 — npm install操作中のメモリ消費

影響を受けることが確認された設定

  • DigitalOcean droplet(1GB、2GBプラン)
  • AWS EC2 t3.small、t3.medium(2GBインスタンス)
  • Vultr 2GBインスタンス
  • Linode 2GB Nanode
  • 2GBメモリ制限付きのDockerコンテナ
  • 2GBメモリリクエスト/制限付きのKubernetesポッド

動作が確認された設定

  • ≥4GB RAM搭載のシステム
  • ≥2GBの dedicated スワークスペース付きのインスタンス
  • ≥4GBのメモリが割り当てられたDocker Desktop
  • メモリ制限が4GB+に設定されたKubernetesポッド

エビデンスとソース

このトラブルシューティングガイドは、FixClaw Intelligence パイプラインによってコミュニティの議論から自動的に合成されました。