本記事はプロモーションを含みます。 記事内の一部のリンクは広告リンクです。リンクの有無で内容を変えていません。 掲載している数値はすべて自分のサーバーで実際に測った値か、公式ドキュメントの記載です。

「AI用途のVPSは4GB以上がおすすめです」。よく見る書き方です。

その4GBの内訳がどこにも書いてありません。 OSがいくら使うのか、ツールがいくら足されるのか、どこに余裕を見ているのか。根拠が出てこないので、自分の用途に当てはめようがない。

このサイトでは、ここまで4本の記事で全部自分で測ってきました。 その数字を積み上げて、必要なスペックを出します。

先に結論

やりたいことメモリディスク根拠
静的サイト+小さな業務アプリ1〜2GB20GB〜実測(アプリ3本で166MB)
+ n8n で自動化2GB50GB〜実測(+402MB、空き1.1GB残)
+ Dify(起動して置くだけ)4GB100GB〜実測(Dify単体で2,076MB)
Dify を実際に使う8GB100GB〜推定・未検証
+ ローカルLLM(0.5Bクラス)2GB20GB〜実測(本体2.1GB+モデル)
ローカルLLM(1B以上)4GB〜50GB〜推定・未検証

「実測」と書いた行は測った数字です。「未検証」の行は測っていません。どこまでが実測でどこからが推測か、はっきり分けて書きます。

土台:OSと常駐デーモンで何MB持っていかれるか

まずアプリを何も載せない状態のコストです。ここを知らないと積み上げができません。

このサーバー(さくらのVPS 2Gプラン / Ubuntu 24.04)で、再起動直後・Dockerとnginxと自作アプリ1本が動いている状態が 398MB でした。

内訳のうち、多くの人が見落とすものが2つあります。

1. VPSでは働きようがないデーモンが50〜100MB

最初の記事で測った内訳です。

プロセスRSS本来の用途
fwupd44.0MB物理デバイスのファームウェア更新
multipathd26.7MBストレージへの複数I/Oパスの管理
udisksd13.4MBディスク・リムーバブルメディアの管理
ModemManager12.8MBモバイル通信モデムの管理

VPSに物理ファームウェアはありません。モバイル通信のモデムも刺さっていません。常駐3つで約53MB、fwupd が起動していると約97MB。

さらに 43時間の連続測定では、この fwupd が瞬間的に 188MB まで跳ねていました。自作アプリの最大値(87.9MB)の2倍以上です。

プランを上げる前に、まずここを見てください。

2. Docker を入れると 49MB が恒久的に乗る

コンテナを1本も動かしていない状態で、dockerd と containerd が常駐します。

dockerd     49.4MB
containerd  50.6MB

RSSの合計は100MBですが、システム全体の増加として観測できたのは 約49MB でした(RSSは共有ライブラリを重複して数えるため、単純合計は実際の消費と一致しません)。

containerd の存在を忘れないでください。 dockerd とほぼ同じサイズがもう1本います。そして docker stop してもこの2つは消えません。Dockerを入れた時点で、恒久的に49MBです。

ツールごとの実測コスト

n8n:+402MB

実測記事の数字です。

段階増分
Dockerデーモン+38MB
n8nコンテナ起動+328MB
管理画面を開いてワークフロー1本+36MB
合計+402MB

正体は Node.jsのプロセス2本(305.6MB + 117.5MB)でした。アプリケーションが重いのではなく、ランタイムが2本立ち上がる構造です。

2GBプランで、載せてもまだ1.1GB空いていました。

Dify:+2,076MB

実測記事の数字です。桁が変わります。

値
立ち上がるコンテナ16本
物理メモリ上1,195MB
スワップ上881MB
合計2,076MB

n8nは1本、Difyは16本。api / worker / web / PostgreSQL / Redis / ベクトルDB / プラグイン基盤 …… が一式ついてきます。

そしてこの2,076MBは、ワークフロー0本・ナレッジ0件・アクセス0の、完全にアイドルの状態の数字です。

ここは注意して読んでください。 この測定では、Difyに与えたメモリ枠を1,200MBに絞っていました。そのため881MBがスワップへ押し出されています。枠を広げれば、スワップに落ちていた分が物理メモリに乗るだけで、合計の要求量はおおむね変わらないと考えられます。 ただしこれは推定です。 メモリを増やした環境での実測はこれからやります。

ローカルLLM(Ollama):本体36MB+モデル×2.4倍

実測記事の数字です。

値
Ollama本体(常駐メモリ)36MB
Ollama本体(ディスク)2,160MB
モデルの必要メモリファイルサイズ × 約2.4

本体は36MBしか常駐しません。 Docker(49MB)より軽い。重いのはモデルのほうです。

0.5Bのモデル(ファイル380MB)で、メモリのピークは実測 930MB。この倍率で逆算できます。

載せられるモデルファイル ≒ 空きメモリ ÷ 2.4

そして速度の崖は0.5Bと1Bの間にありました。

モデル生成速度
0.5B15.36 tok/s
1B0.07 tok/s
3Bサービスが落ちた

219分の1です。 段階的に遅くなるのではありません。2GBのVPSでは0.5Bクラスが上限でした(GPUなし・CPUのみ)。

Claude Code:+268MB

Claude CodeをVPSで動かすで測りました。

値
実行中の最大メモリ268MB
ディスク206MB
Node.js不要

公式のシステム要件は「4GB以上のRAM」です。 2GBのこのサーバーで実際に動きましたが、測ったのは10行程度のコードを書かせる軽い作業だけです。大きなリポジトリを読ませたときは測っていません。

Ollamaと違ってモデルを持たないので、ディスクは206MBで済みます。重いのはモデルであって、AIツールそのものではないという点は、ここでも同じです。

足し算してプランを決める

土台とツールを足すだけです。

n8n だけの場合
  土台 約400MB + n8n 402MB = 約800MB
  → 2GBプランで、まだ1.1GB余る(実測どおり)

Dify を入れる場合
  土台 約400MB + Dify 2,076MB = 約2,480MB
  → 2GBプランには入らない。4GBが最低ライン

2GBのマシンに2,076MBのものを載せようとすると何が起きるかは、実際にやりました。

  • スワップに881MB押し出され
  • CPUのI/O待ちが最大91%
  • ロードアベレージ5.72
  • SSHの接続が切れました
  • 通常は数秒で終わるデータベースのマイグレーションに約4分

起動してしまえば静止しますが(load 0.2 / CPUアイドル98%)、そこに至るまでの4分間、サーバーは事実上使えません。

「余裕」をどれくらい見るか

実測から言うと、OSのメンテナンス用に最低300MBは空けておくべきです。

43時間の記録で、メモリのピークを作っていたのは自作アプリではなく unattended-upgrades(Ubuntuの自動更新) でした。平常時400MBのところ、朝6時22分に641MBまで上がっていました。

しかもこの自動更新は、依存パッケージを更新してアプリを勝手に再起動します。 実際、記録の中で自作アプリのRSSが 72.0MB → 43.3MB に落ちた瞬間が残っていました。

空きギリギリで運用していると、深夜の自動更新でOOM Killerが走ります。 ここは削れません。

見落とされがち:先に埋まるのはディスク

メモリの話ばかりされますが、AI用途で先に効くのはディスクです。

イメージのサイズ
n8n2.47GB
Dify10.6GB

Difyの dify-api は1本で4.06GB。n8nのイメージ全体より大きい。

さくらのVPS 2Gプランの標準SSDは50GBです。Ubuntuの基本構成で約10GB使うので、Difyを入れると残り約27GB。 ここにローカルLLMのモデルファイル(1つ数GB)を足していくと、メモリより先にディスクが苦しくなります。

私自身、測る前はこの順番を逆に考えていました。

なお、Docker 29系ではイメージの実体が /var/lib/containerd に置かれます。/var/lib/docker を見ても分かりません(実測すると5.9MBしかありませんでした)。内訳を見るなら docker system df を使ってください。

CPUはほとんど要りません

これは意外だと思います。プラン選びでCPUコア数を気にする必要は、ほぼありません。

43時間・2,590サンプルの実測です。

指標中央値最悪値
CPUアイドル率100%57%
ロードアベレージ(1分)0.021.21

Difyを16コンテナ動かしている定常状態でも、CPUアイドル98% / ロード0.2〜0.4 でした。

CPUが跳ねるのは起動時と、バッチ処理が走る間だけです。しかも43時間の記録では、バッチ処理はCPUを35%使ってもメモリは動きませんでした(データを1件ずつ処理する型なので、全部をメモリに載せない)。

「重い処理=メモリが要る」は、いつも成り立つわけではありません。

さくらのVPSはメモリを上げるとvCPUも一緒に増える構成なので、メモリで選べばCPUは自動的についてきます。 逆にCPU目当てで上位プランを選ぶ理由は、AI用途では薄いと考えています。

スワップは「足りないメモリの代わり」にはならない

Difyの実測で、はっきりしました。

スワップを2GB用意してあったので、2GBのマシンで2,076MBのDifyは起動しました。落ちもしませんでした。 しかしその代償が、I/O待ち91%とSSH切断です。

スワップは「緩衝材」であって「増設メモリ」ではありません。

一方で、緩衝材としては確実に効きます。43時間の記録で、メモリに1.3GB以上の余裕がある状態でもスワップは最大46MB使われていました。 長時間触られていないページが静かに退避されているだけで、逼迫していなくてもLinuxはこれをやります。

そしてさくらのVPSでは、スワップなしのイメージが提供される場合があります。 公式マニュアル「swapfileの追加」に「一部、スワップパーティションを含まないイメージの提供を行っております」と明記されており、追加手順も公式に用意されています。

私が確認した範囲では、運用中の4台すべてがスワップ0でした。契約したら最初に確認してください。

swapon --show     # 何も出なければスワップなし
free -h           # Swap: の行が 0B なら同じ

さくらのVPSのプラン対応

2026年9月時点の公式価格(税込・月額)と、上の積み上げを重ねたものです。

プランvCPUSSD月額この記事の用途で言うと
512MB120GB¥685静的サイト専用。ツールは載りません
1GB230GB¥972静的サイト+小さなアプリまで
2GB350GB¥1,706n8nで自動化するならここ(実測で1.1GB余る)
4GB4100GB¥3,888Difyを置くならここが最低ライン
8GB6200GB¥7,776Difyを実用する / 1B以上のローカルLLM(未検証)
16GB8400GB¥15,552—

価格・仕様は変わります。申し込む前に公式の最新情報を確認してください。

さくらのVPS公式:https://vps.sakura.ad.jp/

(上記は広告リンクです。この記事の数値と結論は、提携の有無とは無関係です。 私はこのサーバーで実際に測っていて、その内容をリンクのために変えていません。)

迷ったら小さく始めてよい理由

さくらのVPSは、あとからプランを上げられます。

公式マニュアルの「スケールアップ」に条件が書かれています。

  • IPアドレスは変わりません(「プラン変更後も以前と同じIPアドレスをご利用いただけます」)
  • サーバーを停止して行います。その間サイトは落ちます
  • ディスク容量が減るプランへは変更できません。つまり下げられません
  • 課金は新プラン2か月分から、旧プランの未使用分を日割りで差し引き

IPが変わらないので、DNSもTLS証明書も設定し直す必要がありません。 ここは大きいです。

したがって、判断に迷ったら小さいプランから始めて構いません。 上げるのは簡単で、下げるのは(実質)できない。それが分かっていれば、最初に上位プランを掴む理由はありません。

「とりあえず4GB」より「2GBで測ってから決める」 ほうが、この構造には合っています。

測っていないこと

正直に書きます。この記事で未検証なのは3点です。

  1. メモリ4GB・8GBでの実測。 Difyがスワップなしで動いたとき、実際に何MBに落ち着くのか
  2. Difyを実際に使ったときのコスト。 上の2,076MBは完全にアイドルの数字です。ワークフローを組み、ナレッジを入れ、モデルを呼んだらどうなるかは測っていません
  3. 4GB以上でのローカルLLM。 2GBでは0.5Bが上限だと実測しましたが、1B・3Bがスワップなしの環境で実用速度になるかは測っていません

この3つを「たぶん8GBあれば大丈夫」で埋めるつもりはありません。 測ってから追記します。

まとめ

  • 土台(OS+常駐デーモン+Docker)で約400MB。うち50〜100MBはVPSでは働きようがないデーモン
  • n8nは+402MB。2GBプランで足りる(実測で1.1GB余る)
  • Difyは+2,076MB。2GBには入らない。4GBが最低ライン
  • 余裕は最低300MB。自動更新が朝6時に641MBまで上げる
  • ディスクのほうが先に埋まる。Difyのイメージだけで10.6GB
  • ローカルLLMは本体36MB+モデル×2.4倍。2GBでは0.5Bクラスが上限(1Bで0.07 tok/s)
  • CPUはほとんど要らない。実測でアイドル率の中央値100%、Dify稼働中でも98%
  • スワップは緩衝材であって増設メモリではない。ただし無いと危ない
  • 迷ったら小さく始めてよい。あとからIPを変えずに上げられる

「何GB必要か」は、土台の実測値にツールの実測値を足すだけで出せます。この記事の数字はすべて自分のサーバーで測ったもので、測っていないものは測っていないと書きました。

次はメモリを増やした環境で同じ手順・同じ間隔で測り直します。 上の未検証3点を、推測ではなく数字で埋めます。


この記事で使った測定記事