安いVPSの選び方と見落としやすい条件
安いVPSの提供内容を1行ずつ検証します。vCPUのオーバーセル、「無制限」帯域の公正利用条項、NVMeの実態、更新料金、返金期間中に行う30分の受け入れテストを確認できます。
安価な VPS の提供内容に含まれないもの
安価な VPS の提供内容は、価格から逆に読みます。ページ上の価格は、最も参考にならない数字だからです。そのサーバーの品質を左右するのは、掲載情報に書かれていない部分です。vCPU 数の裏にあるオーバーセル比率、「無制限」という表現の裏にある公正利用条項、初回契約期間後の更新料金、バックアップと IPv4 アドレスに追加料金がかかるかどうかを確認する必要があります。このガイドでは、提供内容を1行ずつ確認した後、返金を依頼できる期間中にサーバーで実行する受け入れテストを説明します。
安価であること自体が問題だという意味ではありません。古いハードウェア、高密度な収容、セルフサービス型のサポート、薄いプラットフォーム冗長性によって、低価格が実現しています。重要なのは、ユーザーに問題を発見される前に、どのような妥協を受け入れたのか把握することです。以下の手順はすべて Ubuntu 24.04 上で実行し、パッケージは August 2026 に利用できるものを使用します。
vCPU はコアではありません
vCPU はシリコンの一部ではなく、スケジューリング用のスロットです。KVM (kernel-based virtual machine) では、各 vCPU がホスト上のスレッドとして動作し、ホストのスケジューラが順番に応じてそのスレッドを物理コアへ割り当てます。ホストは、1 つの物理コアに対して 4 vCPU を販売できます。それでも、各ゲストは nproc で割り当てられた数をすべて報告します。掲載されている数は要求できる上限であり、あなたのために確保されているリソース量を示すものではありません。
オーバーセル比率は、ホストが 1 つの物理コアに対して販売する vCPU 数です。1:1 なら、そのコアを単独で使用できます。低価格のプランでは比率が高く設定されており、その比率が公開されることはほとんどありません。そのため、「dedicated core」または「dedicated vCPU」と明記されていない掲載内容は、共有リソースとして扱ってください。多くのサーバーはほとんどの時間アイドル状態であるため、共有でも大半の用途には対応できます。ただし、自分の負荷が高い時間帯と、他の利用者の負荷が高い時間帯が重なると、性能低下が発生します。
ゲスト内部から影響を測定できます。vCPU が実行可能な状態でも、ホストが物理コアを別のゲストに割り当てると、その待ち時間は steal time としてカウントされます。これは vmstat の st 列と、top の %st で確認できます。Steal time は、近隣の利用者による負荷が自分のメトリクスに現れる指標です。掲載内容で偽装できないため、このガイドで最も役立つ数値です。
Dedicated core でも、別の形で共有されるリソースは残ります。メモリ帯域幅、ラストレベルキャッシュ、ストレージ経路はホスト全体で共有されます。「Dedicated vCPU」は、変動の最大要因を取り除きます。ただし、すべての変動がなくなるわけではありません。
lscpu を使って CPU モデルも確認してください。どちらも「4 vCPU」と記載されたプランでも、ホストの世代が数世代古いと、シングルスレッド性能が 2 倍異なる場合があります。低価格の古いシリコンはビルドエージェントには妥当な選択ですが、決済ページには適していません。
「Unlimited bandwidth」には少なくとも4種類の異なる商品があります
トラフィックの説明には4つの方式があり、互換性はありません。
- 従量制の利用枠。掲載情報に「2 TB per month」などの数値が示されています。重要なのは、上限を超えた後の扱いです。追加の TB ごとに超過料金が発生するのか、月が切り替わるまで非常に低速に制限されるのかを確認します。必要になる前に、どちらの方式か調べてください。
- 公正利用条項付きの無制限プラン。トラフィックは計測されず、許容される利用範囲が数値ではなく文章で定められています。その文書で「fair use」、「sustained」、「excessive」、「abuse」を検索してください。
- ポート速度の上限。100 Mbit/s のポートでは、トラフィックポリシーの内容にかかわらず、物理的な上限によって制限されます。
- 上記2つを組み合わせた方式。低速なポートでトラフィックが無制限です。安価なプランでは最も一般的な形態で、ポート速度を確認していれば誠実な提供内容です。
The data behind this chart
[
{
"label": "100 Mbit/s",
"tb_ceiling_30d": 32,
"hours_per_tb": 22.2
},
{
"label": "200 Mbit/s",
"tb_ceiling_30d": 65,
"hours_per_tb": 11.1
},
{
"label": "500 Mbit/s",
"tb_ceiling_30d": 162,
"hours_per_tb": 4.4
},
{
"label": "1 Gbit/s",
"tb_ceiling_30d": 324,
"hours_per_tb": 2.2
}
]ポート速度は厳格な上限であり、計算は単純です。100 Mbit/s は毎秒 12.5 megabytes なので、そのポートを30日間フルレートで使用すると約 32 TB を転送できます。同じ30日間を 1 Gbit/s のポートで使用すると 324 TB になります。ここでの TB は 10^12 bytes を意味し、ホストが請求に使用する単位です。これは計算値であり、実測値ではありません。実際のサーバーが1か月間ポートを常に最大速度で使い続けることもありません。
プランによって変わるのは、2つ目の項目です。1 TB の転送には、100 Mbit/s のポートで約 22.2 時間、gigabit ポートで 2.2 時間かかります。復旧計画が「バックアップをダウンロードして再開する」である場合、この時間が復旧時間になります。
この仕様の1行には、さらに2つの注意点があります。「1 Gbit/s shared」は、他のゲストとポートを共有することを意味します。そのため、上記の上限は保証値ではなく、最良の場合の値です。また、一部のホストは総転送量ではなく、サンプリングした通信速度の95パーセンタイルでトラフィックを請求します。この方式では、変動の大きい通信よりも、一定した負荷のほうが大幅に安くなります。
プランの内容にかかわらず、自分の利用量を測定してください。vnstat はインターフェースのカウンターを読み取り、履歴を保持します。
sudo apt install -y vnstat
sudo systemctl enable --now vnstat
vnstat -d
vnstat -mインストール直後はデータベースにサンプルがないため、vnstat は Not enough data available yet. を表示します。翌日に再度確認すると、vnstat -m で月間合計を確認できます。支払っている利用枠と比較してください。
NVMe という主張は本当ですか。確認できますか。
lsblk -d -o NAME,ROTA,SIZE,MODELROTA が 0 ということは、ゲストに対してデバイスが非回転式だと通知されていることを意味します。この値はハイパーバイザーから提供されるため、基盤となるメディアではなく、ホストが通知している内容を示します。/dev/vda のような virtio ディスクでは MODEL 列は通常空欄で、SCSI 接続のディスクでは汎用的な QEMU HARDDISK が表示されます。確認しているのは仮想ディスクなので、そのラベルだけでは何も証明できません。
確認する価値があるのはレイテンシーです。実際の違いは、ローカル NVMe とネットワーク接続ボリュームの間にあります。ネットワークボリュームは大きなシーケンシャルスループット値を示していても、体感では遅いことがあります。スループットは多数のリクエストを同時に処理して測定する一方、データベースは一度に 1 件の小さな書き込みを待つためです。レイテンシーはキュー深度 1 で測定し、IOPS (input/output operations per second) はより深いキューで測定します。
sudo apt install -y fio
fio --name=lat --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randread --bs=4k --iodepth=1 --numjobs=1 --runtime=60 --time_based --group_reporting
fio --name=iops --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randread --bs=4k --iodepth=32 --numjobs=1 --runtime=60 --time_based --group_reporting
rm -f fiotestclat percentiles ブロックを確認し、特に 99.00th 行を見ます。これはリクエストの遅い方から 1% が経験した完了レイテンシーであり、ユーザーが停止として感じる値です。大まかな目安として、キュー深度 1 のローカル NVMe は数百マイクロ秒で応答し、ネットワーク接続ボリュームはミリ秒単位で応答します。公開されている単一の値をそのまま信頼せず、自分で実行した 2 回の結果を比較してください。また、1 日の中で時間帯を変えて 3 回ずつ実行してください。他のテナントと共有されるディスクは、03:00 と 20:00 で動作が異なるためです。
fio は最初に 1 GB のファイルを書き込むため、ディスクに空き容量を確保してください。また、テストによってプランに設定された IOPS の上限を消費することにも注意してください。簡単に確認するだけなら、ioping -c 20 . でレイテンシーを 1 行で取得できます。ベンチマークは再現できて初めて価値があります。そのため、正確なコマンドラインと出力を日付とともに保存してください。
含まれるものと、追加料金が発生するもの
- IPv4。通常、1 個のアドレスが含まれます。一部の格安プランでは、NAT(network address translation)配下の共有アドレスと、いくつかのポート転送だけが提供されます。この場合、自分のサーバーで 443 番ポートを使用できません。
ip -4 addr show scope globalとcurl -4 https://icanhazip.comで確認してください。2 つの回答が異なる場合は、NAT 配下です。 - IPv6。ルーティングされた /64 があれば、コンテナや外部から到達可能にしたいものにアドレスを割り当てられます。単一の /128 では、送信トラフィック以外はほとんど利用できません。
- バックアップ。自動バックアップは通常、有料オプションです。スナップショットは無料の場合が多いものの、コピー元のディスクと同じ基盤上に保存されます。そのため、自分の操作ミスからは保護できますが、ホストの喪失からは保護できません。プランに含まれる内容にかかわらず、1 つはサーバー外に保存してください。
- DDoS 対応。多くのホストは、ボリューム型攻撃(distributed denial of service)を受けると、一定期間、IP アドレスを null route にします。サーバー自体は正常なままですが、インターネットから到達できなくなります。発動するしきい値と、null route が継続する期間を確認してください。
- サポート範囲。管理対象外プランでは、あなたがシステム管理者です。ホストの責任範囲は、ハイパーバイザーとネットワークまでです。同じ仕様の 2 つのプランで、実際に最も大きな費用差になるのはこの点です。
- ライセンスとパネル。コントロールパネル、商用オペレーティングシステム、メールの追加機能は、サーバー本体より毎月の料金が高くなることがあります。
購入する仮想化タイプはどれですか?
systemd-detect-virtkvm または qemu は完全仮想化を意味します。独自のカーネルを使用し、読み込むモジュールを自分で選択できます。lxc、lxc-libvirt または openvz は、ホストのカーネルを共有するコンテナを意味します。none はベアメタルを意味します。
共有カーネルでは、この違いが問題になります。ホストが読み込んでいないカーネルモジュールをコンテナは読み込めないため、sudo modprobe wireguard は失敗し、ip link add dev wg0 type wireguard は RTNETLINK answers: Operation not supported を返します。lxcfs がない場合、free -h は自分のメモリではなくホストのメモリを報告することがあります。そのため、監視で取得する数値がサーバーの実際の状態を示さなくなります。Swap も他のコンテナと共有されることが多く、VPS 内で仮想マシンを実行することはまったくできません。コンテナプランが安いのには理由があります。ただし、静的サイトや小規模なアプリケーションであれば、コンテナプランが適した選択である場合もあります。
更新料金はいくらですか?
表示価格は、最初の契約期間だけに適用されることがよくあります。注文ページで「renews at」という文言を探し、割引が適用される期間も確認してください。1 年間だけ続く割引と、契約期間中ずっと固定される割引は、初回請求額が同じでも別の商品です。
返金条件も同じように注意して確認してください。返金保証期間の長さ、期間の起点が注文時かプロビジョニング時か、追加 IP アドレスなどのアドオンが返金対象か、年間前払い料金が日割りで返金されるかを確認します。更新日の 1 週間前にカレンダーへリマインダーを設定してください。解約に適した安いタイミングは、請求前だからです。
後から移行する場合も、費用はかかります。数百 GB のデータを移行し、設定を再構築し、DNS(domain name system)の time to live 値が反映されるまで待ち、メールサーバーであれば IP レピュテーションを再構築するには、週末全体が必要になることがあります。料金の節約が魅力的に見える場合も、その週末の作業時間を計算に入れてください。比較すべき数字は初月の料金ではなく、VPS の年間実質費用です。
30 分間の受け入れテスト
何も移行する前に、新しいサーバーでこのテストを実行してください。返金可能期間が残っている間に行います。最初にセキュリティを設定します。新しい VPS で最初の 10 分間に行う作業で、ユーザーアカウント、鍵、ファイアウォールを設定します。その後、ツールをインストールします。
sudo apt update
sudo apt install -y sysbench fio ioping sysstat stress-ng vnstat mtr-tiny curl確認 1: 実際に提供されたリソースは何か
systemd-detect-virt
nproc
lscpu | grep -E 'Model name|MHz|Hypervisor'
free -h
lsblk -d -o NAME,ROTA,SIZE,MODEL
ip -4 addr show scope global
curl -4 -s https://icanhazip.com仮想化方式、CPU モデル、購入したプランの値と数パーセント以内のメモリ容量が表示されるはずです。free -h がプランの容量を大幅に上回る RAM を報告する場合、ボーナスではなく、lxcfs がないコンテナです。curl に表示されるパブリックアドレスが ip -4 addr にまったく表示されない場合、IPv4 アドレスは共有されています。
確認 2: 1 スレッドの速度と、負荷時の steal はどの程度か
sysbench cpu --cpu-max-prime=20000 --threads=1 runevents per second の行を記録します。シングルスレッド性能によって、ページのレンダリング速度やビルド時間が決まります。低価格プランで最も差が出やすい値でもあります。次に、すべての vCPU に負荷をかけ、スケジューラーが実際に割り当てるリソースを確認します。
stress-ng --cpu 0 --timeout 300s &
vmstat 1 30
mpstat -P ALL 1 10--cpu 0 はオンライン CPU ごとに 1 つのワーカーを起動します。vmstat の st 列と、mpstat の %steal を監視します。共有プランで一時的に 1 桁の値になるのは正常です。数分間にわたって steal が 2 桁で推移する場合、物理コアが過剰に割り当てられています。そのため、別のテナントの処理が終わるまで自分の処理が待たされます。負荷をかけた状態で sysbench をもう一度実行します。シングルスレッドのスコアが大きく低下する場合、vCPU 同士が競合しています。通常は、別々のコアではなく、1 つのコア上の兄弟スレッドです。steal がほぼ 0 なのにスコアが低い場合は別の原因です。ホスト側で CPU 制限が適用されています。これはゲスト内部から直接確認できません。
確認 3: キュー深度 1 でディスクはどのように動作するか
NVMe のセクションにある 2 つの fio コマンドを実行し、キュー深度 1 の 99 パーセンタイルレイテンシと、深度 32 の IOPS の両方を保存します。次に書き込みも確認します。多くのボリュームでは、書き込み方向の性能が大幅に低下するためです。
fio --name=wlat --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randwrite --bs=4k --iodepth=1 --numjobs=1 --runtime=30 --time_based --group_reporting
rm -f fiotestdd のシーケンシャル性能は、掲載情報で引用されやすい値です。しかし、収集できる値の中では最も有用性が低い値です。データベースや負荷の高い Web アプリケーションは、日常的にシーケンシャルストリーミングを行うわけではないためです。比較したい場合は収集してください。判断すべきなのはレイテンシです。
確認 4: ユーザーの利用場所から見たネットワークはどうか
まず、大きなファイルを VPS にダウンロードします。
curl -o /dev/null -w 'in: %{speed_download} bytes/s\n' https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xzこれは、サーバーまでの 1 つの経路だけをテストします。それ以外は確認できません。重要なのは、ユーザーが利用する方向です。そのため、ファイルを配信し、ユーザーの近くにあるマシンからダウンロードします。
fallocate -l 100M /var/tmp/100mb.bin
python3 -m http.server 8080 --directory /var/tmp次に、ユーザーの近くにあるラップトップまたはサーバーから実行します。
curl -o /dev/null -w 'down: %{speed_download} bytes/s\n' http://YOUR_SERVER_IP:8080/100mb.bin
mtr --report --report-cycles 50 YOUR_SERVER_IPこのテスト中は、ファイアウォールでポート 8080 を開いておく必要があります。終了後はポートを閉じ、ファイルを削除し、Ctrl+C で Python サーバーを停止してください。mtr の出力では、最終行の loss 列を確認します。中間ホップで loss が発生していても、宛先では発生していない場合は正常です。ルーターは、mtr が集計する ICMP (internet control message protocol) の応答を低い優先度で返すためです。これは実際のネットワークトラフィックの loss ではありません。最終行の loss は実際の loss です。
ユーザーのピーク時間帯にもネットワークテストを繰り返します。02:00 に 1 回だけ測定しても、ネットワークが空いている時間の状態しか分かりません。
4 つの結果をすべて日付とともにファイルへ保存し、1 か月後に再実行します。初日は問題なかったプランが 6 週目に遅くなっている場合、ホストのリソースが埋まった可能性があります。初日の数値があれば、それを把握できます。なければ推測するしかありません。
低価格 VPS を選ぶべき場合
低価格には、実際に得られるものと、実際に失うものがあります。古い CPU、高いオーバーセル率、遅いネットワークストレージ、セルフサービスのサポート、薄い冗長構成によって、価格は低くなります。用途に合っているかを確認してください。
開発用サーバー、CI runner、VPN endpoint、監視ノード、バックアップ先、静的サイトでは、安価な構成が適しています。これらは 1 分程度の遅延が発生しても運用を継続できます。一方、レイテンシー自体がサービス品質を左右する用途では、安価な構成は適切ではありません。決済ページ、対話型 API、ゲームサーバー、ほかのサービスが応答を待つデータベースなどが該当します。上記のテストを使えば、どちらを選んだのかを判断できます。しかも、まだ費用をかけずに変更できる段階で判断できます。
FAQ
格安 VPS のオファーにある vCPU とは何ですか?
vCPU はゲストに提供される仮想プロセッサです。可能な場合、ホストのスケジューラが物理コア上で実行するスレッドに対応します。これは CPU 時間を要求するための割り当てであり、「dedicated core」または「dedicated vCPU」と明記されていない限り、専用ハードウェアではありません。ホストは保有するコア数を超える vCPU を販売しており、その比率が公開されることはほとんどありません。そのため、実際に測定してください。stress-ng --cpu 0 --timeout 300s を実行し、vmstat 1 の st 列を確認します。Steal が 2 桁のままなら、他のゲストが使用しているコアを待たされている状態です。
「unlimited bandwidth」は本当に無制限ですか?
いいえ。通常、上限はプランの説明以外の 2 か所にあります。acceptable use policy には fair use limit が文章で定められ、ポート速度にはバイト数による絶対的な上限があります。100 Mbit/s のポートは、最大速度を 30 日間維持しても約 32 TB を超えて転送できません。そのため、ポート速度を確認し、ポリシーで「fair use」と「sustained」という語を確認してください。次に、実際の送信量を vnstat -m で追跡し、割り当て量と比較します。
VPS が本当に NVMe を使用しているかどうかは、どう確認できますか?
ゲスト内部から物理メディアを確認することはできません。lsblk が報告するのは、ハイパーバイザーが提示する情報だけだからです。確認できる内容は ROTA が 0 で、モデル文字列が空または汎用的な値になることです。測定できるのは動作特性です。--iodepth=1 で --direct=1 を指定して fio を実行し、完了レイテンシの 99.00 パーセンタイルを確認してください。ローカル NVMe の応答は数百マイクロ秒ですが、ネットワーク接続ボリュームはシーケンシャルスループットが優れていてもミリ秒単位になります。共有ディスクの性能は 03:00 と 20:00 で同じではないため、1 日の中で数回繰り返してください。
返金期間が終了する前に、何をテストすべきですか?
次の 4 つを、この順番で確認します。実際のサーバー構成を systemd-detect-virt、lscpu、free -h で確認します。シングルスレッド性能を sysbench cpu --cpu-max-prime=20000 --threads=1 run で測定します。全負荷時の Steal time を、vmstat 1 で監視しながら stress-ng --cpu 0 で確認します。ディスクレイテンシを、queue depth 1 で fio を使って測定します。最後に、ユーザーの近くにあるマシンから mtr を実行し、サーバーから提供するファイルをダウンロードしてネットワークを測定します。すべて測定しても 30 分で済みます。何かを移行する前に実施すれば、返金期間を交渉材料として維持できます。