prodnote.dev本番ノート

Index/01

VPSのメモリは何GB必要か — 個人開発のアプリを46日動かして実際に測ってみた

はじめてVPSを借りるとき、プランの選び方で迷いませんか。個人開発のアプリ(Django + Next.js + PostgreSQL)を2GBプランで46日動かし、メモリの使用量を実際に測りました。用語の説明つきで、あなたが何GBを選べばいいかまで書きます。

Published
Updated
Tags
VPSConoHa VPSDocker個人開発

PR本記事にはアフィリエイトリンクを含みます

作ったアプリを公開しようとサーバーを探すと、最初につまずくのがプラン選びです。

1GB   月 約700円
2GB   月 約1,000円
4GB   月 約2,000円
8GB   月 約4,000円

数字が並んでいるだけで、自分にどれが必要なのかが分からない。 私もそうでした。

安いプランで始めて足りなくなったら上げればいい、と考えて 2GB を選び、46日間動かしてみました。この記事は、そのとき実際に測った数字の記録です。

結論を先に書くと、足りなくなったのはメモリではありませんでした。正確には、足りなくなり方が想像と違いました。

そもそもVPSのプランは何が違うのか

VPS(仮想専用サーバー)のプランは、主に3つの数字で分かれています。

項目何を決めるか
メモリ(RAM)同時に動かせるプログラムの量。ここが一番効く
CPU(コア数)処理の速さ。個人開発の規模ではあまり困らない
ディスク(SSD)保存できるデータの量。100GB前後が標準で、まず余る

プラン名が「2GBプラン」のようにメモリで表記されているのは、そこが一番の違いだからです。

なので、判断すべきは実質「メモリはいくつ必要か」の一点になります。

何を動かしているか

私が公開しているのは、記事を配信するWebサイトです。次のプログラムが常に動いています。

動いているもの役割
Next.js画面を表示する部分(フロントエンド)
Djangoデータを処理する部分(バックエンド)
PostgreSQLデータを保存するデータベース
nginx外からのアクセスを受け取って振り分ける窓口
certbotHTTPS(鍵マーク)の証明書を自動更新する
redisよく使うデータを一時的に覚えておく

これらは Docker のコンテナとして動かしています。

実測1:動かすだけなら、かなり余裕がある

実際に測った結果です。

コンテナメモリ使用量2GBに対する割合
Next.js(フロントエンド)201.7 MiB10.26%
Django(バックエンド)75.6 MiB3.85%
certbot27.6 MiB1.40%
PostgreSQL12.7 MiB0.64%
nginx12.4 MiB0.63%
redis3.0 MiB0.15%
合計約 333 MiB約 17%

6つ全部合わせて 333MiB。2GB に対して17%しか使っていません。

サーバーの忙しさも測りました。

$ uptime
 10:05:58 up 46 days, 10:59,  1 user,  load average: 0.34, 0.24, 0.20

46日間動かし続けて、0.34。 3コアに対してほとんど何もしていない状態です。

ここまでの数字だけを見れば、「2GB で十分だった」という結論になります。

実測2:ただし、スワップが294MB使われていた

次に、サーバー全体のメモリを見ます。

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       778Mi       139Mi       5.0Mi       1.2Gi       1.2Gi
Swap:          2.0Gi       294Mi       1.7Gi

たくさん数字がありますが、初めて見るときは available(実際に使える量) だけ見れば十分です。ここは 1.2Gi あるので、いま逼迫はしていません

引っかかるのは最後の行です。

294MiB がスワップに逃がされていました。

そして、一度逃がされたものは自動では戻ってきません。 つまりこの294MiBは「過去のどこかで、メモリに載せきれない場面があった」という記録です。

常時動いているのが合計333MiBであることを考えると、これを押し出したのは普段の動作ではありません。一時的に大きくメモリを使った処理があったことになります。

心当たりは1つありました。

実測3:ディスクの8割がビルドキャッシュだった

Docker がディスクをどう使っているかを見て、原因の輪郭が見えました。

種類個数サイズ
イメージ63.7 GB
コンテナ66 MB
ボリューム8609 MB
ビルドキャッシュ35728.9 GB

ビルドキャッシュだけで 28.9GB。 ディスク使用量37GBの、およそ8割です。

私はコードを更新するたびに、本番サーバーの上で next build を実行していました。46日ぶんの更新で、357個のキャッシュが積み上がったわけです。

つまり、こういうことでした

2GBで「動かす」   → 余裕がある(合計333MiB、load 0.34、46日連続稼働)
2GBで「ビルドする」→ ここが詰まる(スワップ294MiB、キャッシュ28.9GB)

サイトが落ちたわけでも、表示が遅くなったわけでもありません。壊れるのではなく、更新のたびに余裕がじわじわ削られていくという形で出てきます。

プラン選びで見るべきなのは、動かすときのメモリではなく、ビルドするときのメモリでした。

では、あなたは何GBを選べばいいか

ここから先は実測ではなく、上の数字からの推定です。4GBで動かして比べたわけではないので、そこは区別して読んでください。

実測から確実に言えるのは2点だけです。

  • 普段動かすだけなら 2GB で足りる(合計333MiB、load 0.34)
  • ビルドのときに無理が出ている(スワップ294MiB)

そのうえで、選び方の手順としてはこうなります。

手順1:サーバーの上でビルドするかどうかを決める

ここが分岐点です。

やり方必要なメモリ
サーバーの上でビルドする(私のやり方)4GB以上を勧めます
ビルドは別の場所でやり、結果だけサーバーに置く2GBで足ります

手順2:迷うなら 4GB から始める

はじめての公開なら、サーバー上でビルドする形になる可能性が高いです。手順がいちばん少なくて分かりやすいからです。

その場合、2GBと4GBの月額の差はおおむね1,000円前後(2026年8月時点)。足りなくて後から移行する手間(サーバーを立て直し、データを移し、DNSを切り替える)に比べれば、はじめから余裕を持つほうが安く済みます。

手順3:ディスクは気にしなくていい

100GB前後あれば、個人開発では余ります。私の場合、37GB使っているうちの28.9GBがビルドキャッシュで、これは1コマンドで消せます

もう1つの選択肢:ビルドをサーバーから外す

プランを上げるほかに、ビルド自体をサーバーの外に出す方法があります。

このサイト(prodnote.dev)は、その形で作りました。記事を書いて GitHub に置くと、外部のサービスがビルドと配信をやってくれます。サーバーのメモリを1バイトも使いません。

ただし、この方法が使えるのはデータベースを持たないサイトに限られます。ログイン機能や投稿機能があるアプリでは使えません。

まとめ

  • 2GBで動かすこと自体は問題なかった。 6つ合わせて333MiB、46日連続稼働、load 0.34
  • 限界はビルドに出た。 スワップ294MiB、ビルドキャッシュ28.9GB(ディスクの8割)
  • 判断すべきは「動かすときのメモリ」ではなく「ビルドするときのメモリ
  • サーバー上でビルドするなら4GB以上、しないなら2GBで足りる

次にやること

はじめて借りるなら、次の順で進めれば迷いません。

  1. サーバー上でビルドするかを決める(迷うなら「する」で考えて 4GB)
  2. プランを契約する(月額の差より、移行の手間のほうが高くつきます)
  3. 借りたらすぐ、セキュリティの初期設定をする ← ここを飛ばさないでください

3番目が特に大事です。VPSは借りた瞬間から、インターネットに公開された状態になります。 レンタルサーバーと違い、OSの設定は自分で面倒を見る必要があります。

私の場合、公開してしばらく経ってから、rootでのログインを禁止し、パスワードではなく鍵でログインする形に変更しました。最初にやっておくべきだったというのが正直なところです。この手順は別の記事にまとめる予定です。