サーバーが遅い:まず何から始めるか
5 分間の診断手順:CPU、メモリ、ディスク、ネットワークについて、いくつかのコマンドでボトルネックを特定し、次に何をすべきかを説明します。
更新日 2026年8月23日
「すべてが遅い」は診断ではありません。ボトルネックはCPU、メモリ、ディスク、ネットワークの4つだけです。以下は、5分でそのうちの1つを特定するための確認手順です。
ステップ1:全体像
uptime
free -h
df -h
3つのコマンドで、選択肢の半分はすぐに除外できます。平均負荷がご利用のティアのコア数より明らかに高い場合、処理が滞留しています。ロードアベレージをご覧ください。availableがゼロに近い場合はメモリです。パーティションが100%使用されているなら、それ以上調べる必要はありません。空き容量不足をお読みください。
ステップ2:何がボトルネックなのか
vmstat 2 5
最初の行を除く、平均値の列に注目してください:
usとsyが高く、rが大きい — CPU律速です。waが高く、bが大きい — ディスク律速です。siとsoがゼロでない — スワップが発生しており、メモリが不足しているということです。stが高い — ハイパーバイザーが消費した時間であり、これは外部要因です。サポートにお問い合わせください。
ステップ3:原因を特定する
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10
iotop -boPan 3 | head -20 # apt install iotop
ss -tn state established | wc -l
リアルタイムの状況はhtopまたはbtopの方が読み取りやすくなります。D状態のプロセスに注目してください。ディスク待ちで負荷を押し上げているプロセスです。
原因がご自身のアプリケーションにある場合、次に問うべきはそのアプリケーションについてです。データベースクエリが遅い、インデックスがない、ワーカーが多すぎる、デプロイ後の無限ループなどです。遅くなり始めた時点とログを突き合わせてください:
journalctl --since "1 hour ago" -p warning
ステップ4:履歴を確認する
パネルの「概要」/hosting/vds/m/<id>を開き、過去1日と1週間のグラフを確認してください。典型的なパターンは3つあります:
- 特定の時点で一段上がっている — 何かが変わりました。デプロイ、アップデート、新しいcronジョブなどです。
- スケジュール通りに定期的なピークがある — バックグラウンドタスクです。夜間に移動するか、
niceとioniceで制限してください。 - 何週間も横ばいのプラトーが続いている — 単純にご利用のティアを超えてしまったのです。
判明した結果への対処
| ボトルネック | 応急処置 | 長期的な解決策 |
|---|---|---|
| CPU | 余分なプロセスを見つけて停止する | コア数が多いティア |
| メモリ | ワーカーとデータベースバッファを制限し、スワップを追加する | メモリが多いティア |
| ディスク | ioniceでバックアップを制限し、ログを削減する | より上位のティア:プラトーはコア数に応じて上がります |
| ネットワーク | --bwlimitでバックグラウンドダウンロードを制限する | トラフィックの発生元を調査する |
ディスクのプラトーは次のように計算します:コアあたり60 MB/sの書き込みで、60を下回らず400を上回らない範囲です。読み取りはその2倍です。常にプラトーに達している場合、上位に移行しない限りディスクは速くなりません。ベンチマークをご覧ください。
よくある間違い
- すぐにマシンを再起動する。 再起動すると状況が消えてしまい、1時間後にはすべて再現します。まず数値を集めてください。
- 1コマだけを信用する。 htopを起動した瞬間のスパイクに意味はありません。1分間観察してください。
- メモリが満杯なのを問題と決めつける。
freeではなくavailableとスワップを見てください。 - 原因を突き止めずにティアを変更する。 メモリリークやループするスクリプトは、新しいティアにもついてきます。ダウングレードはサポートされていません。
CPU、メモリ、ディスクが落ち着いているのにアプリケーションが遅い場合、ボトルネックはマシンの外にあります。遅い外部API、DNS、またはクライアントのネットワークです。必要なアドレスに対して
curl -w '%{time_total}\n' -o /dev/null -sを確認してください。