Linuxサーバーが重い・遅いときの原因と確認方法|CPU・メモリ・ディスクを順番に調べる
Linuxサーバーを運用していると、「急に動作が重くなった」「SSH接続に時間がかかる」「Webサイトの表示が遅い」といった問題が起こることがあります。
サーバーが重いときは、いきなり再起動するのではなく、CPU・メモリ・ディスク・プロセスを順番に確認することが大切です。
特に原因を調べるときは、次のような流れで確認すると整理しやすくなります。
CPU
↓
メモリ
↓
ディスク容量・ディスクI/O
↓
負荷の高いプロセス
↓
アプリケーション・Webサーバー
ここでは、Linuxサーバーでよく使われる基本的なコマンドを使って、原因を切り分けていきます。
まずサーバーの負荷を確認する
最初に確認したいのが、現在どの程度サーバーに負荷がかかっているかです。
代表的なコマンドがtopです。
top
実行すると、CPU使用率やメモリ使用量、プロセスなどをリアルタイムに確認できます。
例えば、
%Cpu(s): 85.0 us, 10.0 sy, 5.0 id
のように表示されていれば、CPUがかなり使われている可能性があります。
一方で、
%Cpu(s): 10.0 us, 5.0 sy, 85.0 id
のようにidが大きければ、CPUにはある程度余裕があります。
ただし、CPU使用率だけを見て「サーバーが重い」と判断するのは避けたほうが安全です。
メモリやディスク、特定プロセスなども合わせて確認する必要があります。
CPU使用率が高い場合
CPUが常に高い場合は、負荷の高いプロセスが動いていないか確認します。
ps aux --sort=-%cpu | head
CPU使用率が高いプロセスを上から確認できます。
例えば、特定のアプリケーションやPHP、データベース、バックアップ処理などがCPUを大量に使用しているケースがあります。
一時的な処理でCPUが上昇しているのか、それとも長時間にわたって高い状態が続いているのかも重要です。
CPU負荷が高くなる主な原因
Linuxサーバーでは、次のような処理がCPUを消費することがあります。
- アクセス急増
- アプリケーションの処理負荷
- データベース処理
- バックアップ
- ログ処理
- cronによる定期処理
- Dockerコンテナ内の処理
- プログラムの異常動作
特に「毎日決まった時間だけ重くなる」場合は、cronなどの定期処理も確認してみてください。
メモリ不足になっていないか確認する
次にメモリを確認します。
free -h
例えば、
total used free shared buff/cache available
Mem: 4.0Gi 3.5Gi 200Mi 100Mi 300Mi 400Mi
のように表示されます。
ここで注意したいのは、freeの数字だけを見て「メモリが足りない」と判断しないことです。
Linuxは空いているメモリをキャッシュなどにも利用するため、usedが大きく見えることがあります。
確認するときは、availableの値も見るようにします。
availableが非常に少ない状態が続いている場合は、メモリ不足の可能性を考えます。
メモリを使っているプロセスを確認する
メモリ使用量の多いプロセスを確認するには、
ps aux --sort=-%mem | head
を使えます。
例えば、
- MySQL
- PostgreSQL
- PHP-FPM
- Node.js
- Dockerコンテナ
- 独自アプリケーション
などが大きくメモリを使用していないか確認します。
アプリケーションにメモリリークなどの問題がある場合、時間の経過とともに使用量が増えていくこともあります。
「サーバーを再起動すると一時的に軽くなるものの、数時間後や数日後にまた重くなる」という場合は、メモリ使用量の推移も確認すると原因を見つけやすくなります。
ディスク容量が不足していないか確認する
CPUやメモリに問題がなければ、ディスクも確認します。
df -h
例えば、
Filesystem Size Used Avail Use%
/dev/sda1 50G 48G 2.0G 96%
のようにUse%が非常に高くなっていないか確認します。
ディスク容量がほとんど残っていないと、ログの書き込みやアプリケーションの処理などに影響する場合があります。
特に、
/var/log- Docker関連データ
- データベース
- バックアップファイル
- 一時ファイル
などが容量を消費していないか確認してください。
ディスク容量不足について詳しく調べる場合は、
du -sh /*
などを使って、どのディレクトリが大きいかを確認できます。
ただし、システムディレクトリのファイルを内容を確認せずに削除するのは危険です。
ディスクI/Oが原因の場合もある
ディスク容量に余裕があっても、ディスクへの読み書きが集中しているとサーバーの動作が遅くなることがあります。
例えば、
- 大量のログ書き込み
- データベース処理
- バックアップ
- 大量のファイル処理
- Dockerのデータ処理
などが原因になることがあります。
topでCPU使用率だけを見ると問題が分かりにくい場合があるため、ディスクI/Oも疑う必要があります。
より詳しく調べる場合は、環境によってiostatなどのツールを利用できます。
iostat
コマンドがインストールされていない場合は、OSに合わせてsysstatなどのパッケージを導入する必要があります。
load averageも確認する
Linuxでは、load averageもサーバーの負荷を見るときに役立ちます。
uptime
を実行すると、
load average: 2.10, 1.80, 1.20
のような値が表示されます。
これは一定期間のシステム負荷を示す指標です。
ただし、load averageの数字だけを見て「2なら重い」「1なら軽い」と単純に判断することはできません。
CPUコア数やI/O待ちなども関係するため、CPU使用率やメモリ、プロセスの状態と合わせて確認することが重要です。
例えば4コアのサーバーと1コアのサーバーでは、同じload averageでも意味が変わります。
特定のプロセスが原因か確認する
サーバー全体が重いときは、原因となっているプロセスを探します。
ps aux --sort=-%cpu | head
CPU使用率順に確認する場合はこちらです。
ps aux --sort=-%mem | head
メモリ使用量順に確認できます。
さらに、topを使えばリアルタイムでプロセスの変化を見ることができます。
特定のプロセスだけが異常に高い場合は、そのサービスのログや設定を確認します。
例えばNginxなら、
sudo systemctl status nginx
PHP-FPMなら、OSやバージョンに応じたサービス名を指定して状態を確認します。
Dockerを使用している場合は、
docker stats
でコンテナごとのCPUやメモリ使用量を確認できます。
Webサイトだけが遅い場合はサーバー以外も確認する
「サーバーが重い」と感じても、実際にはサーバー全体ではなくWebアプリケーション側に問題がある場合があります。
例えば、
- データベースのクエリが遅い
- PHP処理に時間がかかっている
- 外部APIへの接続が遅い
- NginxやApacheの設定に問題がある
- Dockerコンテナ間の通信に問題がある
- DNSやネットワークに問題がある
といったケースです。
そのため、CPUやメモリに余裕があるのにWebサイトだけ遅い場合は、Webサーバーやアプリケーションのログも確認します。
SSH接続まで遅い場合
WebサイトだけでなくSSH接続も遅い場合は、サーバー全体の負荷を疑いやすくなります。
例えば、
ssh user@example.com
で接続するまでに時間がかかる場合、CPUやメモリだけでなくネットワーク、DNS、認証処理なども関係する可能性があります。
ただし、SSH接続の遅延だけでサーバー負荷が原因だと決めつけることはできません。
SSH自体に問題がある場合は、SSHのログや設定も別途確認する必要があります。
サーバーが重いときにいきなり再起動していい?
再起動によって一時的に問題が解消することはあります。
しかし、原因を調べる前に再起動すると、その時点で動いていたプロセスや負荷の状態を確認できなくなることがあります。
特に、
- メモリリーク
- 特定プロセスの異常
- 定期処理
- アプリケーションエラー
- ディスクI/Oの集中
などが原因だった場合、再起動後に症状が再発する可能性があります。
緊急対応が必要な状況では再起動が選択肢になることもありますが、可能であれば再起動前にtopやfree、df、ログなどを確認しておくと、原因調査に役立ちます。
Linuxサーバーが重いときの確認順
原因が分からない場合は、次の順番で確認すると効率的です。
1.CPUを確認
top
CPU使用率が高いか確認します。
2.負荷の高いプロセスを確認
ps aux --sort=-%cpu | head
どのプロセスがCPUを使用しているか確認します。
3.メモリを確認
free -h
availableなどを確認し、メモリ不足になっていないか調べます。
4.メモリ使用量の多いプロセスを確認
ps aux --sort=-%mem | head
5.ディスク容量を確認
df -h
使用率が極端に高くなっていないか確認します。
6.ディスクI/Oを確認
必要に応じて、
iostat
などを使います。
7.アプリケーションやサービスを確認
Nginx、データベース、Dockerなど、実際に動いているサービスの状態とログを確認します。
この順番で確認すれば、「何となくサーバーが重い」という状態から、具体的な原因へ少しずつ絞り込めます。
サーバーの負荷を記録しておくと原因を見つけやすい
サーバーが重くなるタイミングが毎回違う場合、発生した瞬間に確認できないことがあります。
そのため、普段からCPU、メモリ、ディスクなどの使用率を監視しておくと、異常が発生した時間帯との関係を確認しやすくなります。
例えば、
- 毎日深夜にバックアップが動く
- cron実行時だけCPUが上がる
- アクセス増加時にメモリが不足する
- ログが増えるとディスク使用率が上がる
といったパターンを発見できることがあります。
小規模なサーバーでも、最低限の監視を設定しておくとトラブル発生時の調査が楽になります。
まとめ
Linuxサーバーが重いときは、原因を一つに決めつけず、CPU・メモリ・ディスク・プロセスの順番で状態を確認することが大切です。
まずは、
top
free -h
df -h
などを使って、サーバー全体の状態を確認します。
そのうえで、
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head
などを使い、負荷の高いプロセスを探します。
Webサイトだけが遅い場合は、Nginxやアプリケーション、データベースなどサーバー上で動いているサービスまで確認範囲を広げます。
原因を確認しないまま再起動やファイル削除を行うより、現在の状態を記録してから一つずつ切り分けることが、Linuxサーバーのトラブル対応では重要です。
Linuxサーバーが重いとき、最初に何を確認すればいい?
まずtopでCPUやプロセスの状態を確認し、その後free -hでメモリ、df -hでディスク容量を確認すると整理しやすくなります。
CPU使用率が低いのにサーバーが遅いのはなぜ?
メモリ不足、ディスクI/O、ネットワーク、データベース、アプリケーションなど、CPU以外が原因になっている可能性があります。
CPU使用率だけで判断せず、複数の項目を確認してください。
Linuxのメモリ使用率が高くても問題ない?
Linuxは空いているメモリをキャッシュなどに利用するため、usedが大きく表示されることがあります。
free -hを使い、availableなども確認することが重要です。
サーバーが重いときは再起動すれば直る?
一時的に改善する場合はありますが、原因が解決したとは限りません。
可能であれば再起動前にCPU、メモリ、ディスク、プロセス、ログなどを確認しておくと、再発時の原因調査に役立ちます。
