VPSオーバーセル検出方法:Steal TimeとディスクCache断崖の実践
オーバーセルはVPS業界では一般的な現象ですが、過度なオーバーセルはパフォーマンスに大きな影響を与えます。この記事では、CPUのSteal TimeとディスクCache断崖の2つの観点から、実用的な検出方法を提供し、VPSが過度にオーバーセルされているかどうかを判断し、対応戦略を示します。

CPUのSteal TimeとディスクCache断崖現象を継続的に監視し、負荷テストを組み合わせることで、過度にオーバーセルされたVPSを効果的に特定し、迅速に損失を防ぎ、デプロイ戦略を最適化できます。
なぜVPSのオーバーセリングを検出する必要があるのか?
VPS(仮想専用サーバー)は、仮想化技術を用いて物理サーバーのリソースを分割したものです。オーバーセリング(Overselling)とは、プロバイダーが販売する仮想リソースの合計が物理リソースの上限を超えることを指し、IDC業界では一般的な手法です。適切なオーバーセリングはコスト削減につながりますが、過度なオーバーセリングはCPUの競合、ディスクI/Oレイテンシの急上昇、さらには「隣人ノイズ」問題を引き起こす可能性があります。
ユーザーとして、プロバイダーのオーバーセリング設定を直接確認することはできませんが、システムメトリクスの変動パターンから間接的に判断することができます。その中でも、CPU Steal Time と ディスクキャッシュの断崖 は、最も直接的で効果的なシグナルです。
主要指標1:CPU Steal Time
Steal Timeとは?
Linuxシステムでは、steal または st フィールドは、仮想マシンのCPUがHypervisor(ホストマシン)に先取りされた時間の割合を示します。物理CPUリソースが不足すると、Hypervisorが強制的にスケジューリングを行い、VPSが本来受け取るべきCPU時間を得られなくなります。この待機時間がSteal Timeです。
Steal Timeが高いということは、VPSが「CPU待ちの列」に並んでいることを意味し、パフォーマンスが低下します。
Steal Timeを確認する方法
top コマンドを使用して、%Cpu(s) 行の st 値を確認します:
top -n 1 | grep '%Cpu'出力例:
%Cpu(s): 5.1 us, 2.0 sy, 0.0 ni, 92.0 id, 0.0 wa, 0.9 hi, 0.0 si, 0.0 stこの st がSteal Timeです。また、vmstat コマンドを使用して、st 列に注目することもできます(root権限が必要です):
vmstat 1 5判断しきい値
- 5%を超えて継続:ホストCPUが過負荷になっており、VPSに影響が出始めています。
- ピークが10%以上:特に継続的な計算を必要とするタスクでは、顕著なパフォーマンス低下が発生する可能性があります。
- 長期間20%を超える:深刻なオーバーセリングであり、プロバイダーの変更を検討することをお勧めします。
負荷テストシミュレーション
単にアイドル時のSteal Timeを見るだけではわかりにくい場合があります。stress ツールを使用してCPU負荷をシミュレートし、負荷時のSteal Timeの挙動を観察することをお勧めします。
# 安装stress(Debian/Ubuntu)
apt install stress -y
# 满载所有CPU核心60秒
stress --cpu $(nproc) --timeout 60 &
# 同时运行top观察
sleep 5 && top -d 2 | grep '%Cpu'満載状態で st の値が急上昇する場合、物理CPUリソースが他のVPSに大量に奪われており、オーバーコミットが深刻であることを示しています。
主要指標2:ディスクキャッシュの断崖
ディスクCache断崖とは?
VPSのディスクI/O性能は、ホストマシンのメモリ内のCacheに大きく依存しています。キャッシュがヒットすると、読み書き速度は非常に速くなります。キャッシュがヒットしない場合(特に大量の読み書きが突然発生した場合)、物理ディスクの速度がボトルネックとなり、性能が桁違いに低下し、「断崖」を形成します。
ホストマシン上で動作するVPSが多すぎると、各VPSが利用できるCacheの割合が減り、断崖効果が発生しやすくなります。
ディスクキャッシュの性能断崖を検出する方法
hdparm または dd を使用してディスクの読み書き速度をテストし、速度の変動を観察します。
1. 簡単なテスト:
# 写入测试(512MB文件)
time dd if=/dev/zero of=testfile bs=1M count=512 conv=fdatasync
# 读取测试(清缓存后)
echo 3 > /proc/sys/vm/drop_caches # 需要root,清Page Cache
time dd if=testfile of=/dev/null bs=1M count=512最初のテストと繰り返しテストの速度差を記録します。最初の書き込み速度が非常に速い場合(書き込みキャッシュのため)、その後の速度が急激に低下した場合、キャッシュ容量が限られており、競合が激しいことを示しています。
2. fio を使用したより正確なテスト:
# 安装fio(Debian/Ubuntu)
apt install fio -y
# 4K随机写测试,持续60秒
fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --size=1G --numjobs=4 --iodepth=16 --runtime=60 --time_based --direct=1 --group_reportinglat (usec) と iops の分布に注目します。レイテンシー曲線に激しいジッターが見られる場合、キャッシュミス時に物理ディスクの性能が非常に不安定であることを示しています。
断崖の判断方法
複数回の小ファイル読み書きテストを実行し、毎回のIOPSまたはスループットを記録します。例えば:
for i in {1..10}; do
dd if=/dev/zero of=testfile bs=1M count=64 oflag=direct 2>&1 | tail -1
rm testfile
done速度が毎秒数百MBから突然毎秒数十MBに低下し、それが頻繁に発生する場合は、ディスクキャッシュの断崖と判定できます。
その他の補助的な検出手段
1. メモリの可用性
オーバーセールはメモリでも同様に発生する可能性があります。 free -h を使用して利用可能メモリを確認し、常に10%未満で、swapの消費が顕著な場合、メモリもオーバーセールされています。
2. 隣接並行テスト
特定の時間帯(例えば夕方のピーク時)にストレステストを実行し、アイドル時間帯のSteal Timeと比較します。ピーク時の指標が明らかに悪化している場合、オーバーサブスクリプションをさらに裏付けます。
3. 長時間の監視
システムメトリクスを継続的に記録するには、sar または atop を使用することをお勧めします。少なくとも1週間は監視してください。毎週決まった時間の性能変動に注意してください。
# 使用sar记录CPU历史(需要安装sysstat)
sar -u 60 > /tmp/cpu_history.log &オーバーセリングへの対策?
- ピークを避ける: リアルタイムではない業務では、タスクをオフピーク時間にスケジュールする。
- キャッシュを追加する: アプリケーション層にRedisなどのキャッシュを追加して、基盤となるディスクI/Oへの依存を減らす。
- プロバイダーを変更する: Steal Timeが長期間高い場合は、オーバーセリングをしていない、またはオーバーセリング率が低いクラウドプロバイダーに移行する。
- 高性能プランを選ぶ: 一部のプロバイダーは「専用CPU」や「限定的オーバーセリング」のVPSを提供しており、コストは高くなりますが、パフォーマンスはより安定しています。
購入前に専門の検出ツールを使用して評価することをお勧めします。検出コマンド取得ページで自動化された検出スクリプトを入手し、ワンクリックで詳細なオーバーセリング検出レポートを生成できます。
まとめ
VPSのオーバーセル検出は一度きりの操作ではなく、継続的な監視が必要です。Steal TimeとディスクCacheの断崖という2つの中核指標を、ストレステストと長時間の記録と組み合わせることで、現在のVPSに過度なオーバーセルが存在するかどうかを効果的に判断し、アップグレードまたは移行の決定を下すことができます。
覚えておいてください。単一の指標でオーバーセルを100%確定できるものはありませんが、複数の次元のデータを組み合わせることで、真実を十分に見抜くことができます。

この実践ガイドが、VPSを選ぶ際に遠回りをせずに済む助けになることを願っています。サービスプロバイダーの変更を検討している場合は、まずこの記事の方法で現在のサーバーをテストし、その後に目標とするプロバイダーのテスト結果を比較することをお勧めします。