「最近サーバーが遅い気がする」「突然Webサイトが表示されなくなった」――こうした問題が発生したとき、原因を素早く特定できるかどうかは、日頃のパフォーマンス監視にかかっています。
本記事では、Linuxサーバーのパフォーマンス監視について、CPU・メモリ・ディスク・ネットワークの4つのリソースを中心に、監視方法と問題発生時の対処法を解説します。Linuxの基本を復習したい方はLinuxとは?の入門記事を、コマンド操作を確認したい方はLinuxコマンド実践ガイドをご参照ください。
パフォーマンス監視が中小企業のIT運用で重要な理由
大企業のように専任の監視チームがいない中小企業では、サーバーの異変に気づくのが遅れがちです。しかし、パフォーマンス監視を適切に行うことで、以下のようなメリットが得られます。
障害の予兆を早期に検知できる
サーバーが突然ダウンすることは稀で、多くの場合は徐々にリソースが逼迫していく過程があります。CPU使用率の漸増、メモリの空き容量減少、ディスクの使用率上昇などを日常的に監視していれば、障害が発生する前に対処できます。
コスト最適化の根拠になる
「サーバーのスペックが足りないのでアップグレードしたい」という相談を受けたとき、パフォーマンスデータがなければ判断できません。監視データがあれば、本当にスペック不足なのか、アプリケーションの問題なのかを客観的に判断できます。
トラブルシューティングの時間を短縮できる
問題が発生した際、「いつ頃から」「どのリソースが」「どの程度」逼迫しているかがわかれば、原因の特定が格段に速くなります。Linuxのトラブルシューティングガイドとあわせて活用しましょう。
CPU使用率の監視方法と対処法
CPUはサーバーの処理能力を決定する最も重要なリソースの一つです。CPU使用率が持続的に高い状態は、サーバーのレスポンス低下や処理遅延の直接的な原因になります。
topコマンドでCPU状況を確認する
topコマンドは、リアルタイムでシステムの状態を監視する最も基本的なツールです。
# topコマンドの起動
top
# 表示例の見方
# %Cpu(s): 25.3 us, 5.1 sy, 0.0 ni, 68.5 id, 0.0 wa, 0.0 hi, 1.1 si
# us = ユーザー空間の使用率
# sy = カーネル空間の使用率
# id = アイドル(空き)
# wa = I/O待ち(ディスクアクセス待ち)
注目すべきポイントは以下の通りです。
- us(ユーザー空間)が高い:アプリケーションが多くのCPUを消費している
- sy(カーネル空間)が高い:システムコールやI/O処理が多い
- wa(I/O待ち)が高い:ディスクアクセスがボトルネックになっている
- id(アイドル)が低い:CPUリソースが逼迫している
htopでより見やすく監視する
# htopのインストール
sudo apt install -y htop # Ubuntu/Debian系
sudo dnf install -y htop # CentOS/Rocky Linux系
# htopの起動
htop
htopは各CPUコアの使用率がバーグラフで表示され、プロセスの並べ替えやフィルタリングも直感的に操作できます。
mpstatでCPUコアごとの状況を確認する
# sysstatパッケージのインストール
sudo apt install -y sysstat
# 全CPUコアの使用率を2秒間隔で表示
mpstat -P ALL 2
# 特定のCPUコアの使用率を確認
mpstat -P 0,1 2
CPU使用率が高い場合の対処法
CPUを大量に消費しているプロセスを特定し、適切に対処しましょう。
# CPU使用率の高いプロセスを確認
ps aux --sort=-%cpu | head -20
# 特定のプロセスのCPU使用率を監視
pidstat -u 2 5
# 暴走プロセスの停止(PIDを指定)
kill -15 [PID] # 正常終了を要求
kill -9 [PID] # 強制終了(最終手段)
プロセス管理の詳細については、Linuxのプロセス管理の記事を参照してください。
メモリ使用量の監視方法と対処法
メモリ不足は、OOM Killer(Out Of Memory Killer)によるプロセスの強制終了など、深刻な障害を引き起こす可能性があります。
freeコマンドでメモリ状況を確認する
# メモリ使用状況を人間が読みやすい形式で表示
free -h
# 表示例
# total used free shared buff/cache available
# Mem: 7.7Gi 3.2Gi 512Mi 256Mi 4.0Gi 4.0Gi
# Swap: 2.0Gi 128Mi 1.9Gi
注意すべきポイントを解説します。
- availableが重要:freeの値ではなく、availableの値を見る。Linuxはメモリをキャッシュに積極的に使うため、freeが少なくてもavailableが十分なら問題ない
- Swap使用量:Swapが大量に使われている場合、物理メモリが不足している兆候
- buff/cache:ファイルシステムのキャッシュ。必要に応じて自動的に解放される
vmstatでメモリの動的な変化を監視する
# 2秒間隔でメモリ・CPU・I/Oの状況を表示
vmstat 2
# 出力の見方
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 1 0 12800 524288 102400 4096000 0 0 12 24 156 312 12 3 84 1 0
# si/so(swap in/out)が頻繁に発生している場合、メモリ不足の兆候
メモリ使用量が多い場合の対処法
# メモリ使用量の多いプロセスを特定
ps aux --sort=-%mem | head -20
# 特定プロセスのメモリ使用量を詳細に確認
pmap -x [PID]
# ファイルキャッシュの手動解放(緊急時のみ)
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
根本的な対処としては、アプリケーションのメモリリーク修正、不要なサービスの停止、またはメモリ増設を検討しましょう。
ディスクI/Oと使用量の監視方法と対処法
ディスクは、容量の枯渇とI/Oパフォーマンスの両面から監視する必要があります。Linuxのディスク管理の知識があると理解が深まります。
dfコマンドでディスク使用量を確認する
# ディスク使用量を確認
df -h
# 特定のファイルシステムのみ表示
df -h /dev/sda1
# inode使用状況を確認(ファイル数が多い場合に重要)
df -i
ディスク使用率が80%を超えたら警戒、90%を超えたら早急に対処が必要です。
duコマンドでディスク容量を消費している場所を特定する
# ルートディレクトリ直下の使用量を確認
sudo du -sh /* 2>/dev/null | sort -rh | head -20
# 特定ディレクトリ内で大きなファイルを検索
sudo find /var/log -type f -size +100M -exec ls -lh {} \;
# ディレクトリごとの使用量を確認
sudo du -sh /var/log/*
iostatでディスクI/Oを監視する
# ディスクI/Oの状況を2秒間隔で表示
iostat -xd 2
# 出力の見方
# Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
# sda 15.20 256.00 2.40 13.64 1.20 16.84 8.60 128.00 3.20 27.12 2.40 14.88 0.00 0.00 0.00 0.00 0.00 0.00 0.04 3.20
# %util が100%に近い場合、ディスクがボトルネック
# r_await/w_await が高い場合、I/O待ち時間が長い
ディスク関連の問題への対処法
# 古いログファイルの削除
sudo journalctl --vacuum-size=500M
sudo find /var/log -name "*.gz" -mtime +30 -delete
# 不要なパッケージキャッシュの削除
sudo apt clean # Ubuntu/Debian系
sudo dnf clean all # CentOS/Rocky Linux系
# 大きなファイルの特定と対応
sudo find / -xdev -type f -size +500M 2>/dev/null
ログの管理と自動ローテーションについては、Linuxのログ管理ガイドで詳しく解説しています。
ネットワークの監視方法と対処法
Webサーバーやアプリケーションサーバーでは、ネットワークの状態がパフォーマンスに直結します。Linuxのネットワークコマンドの知識が役立ちます。
ssコマンドでネットワーク接続を確認する
# 現在の接続状態の概要
ss -s
# LISTENしているポートの確認
ss -tlnp
# 確立されている接続の確認
ss -tnp state established
# 特定ポートへの接続数を確認
ss -tn state established | grep ":80" | wc -l
iftopでネットワーク帯域を監視する
# iftopのインストール
sudo apt install -y iftop # Ubuntu/Debian系
# ネットワーク帯域のリアルタイム監視
sudo iftop -i eth0
ネットワーク帯域の使用状況を確認する
# nloadでネットワークトラフィックを視覚的に確認
sudo apt install -y nload
nload eth0
# sarコマンドでネットワーク統計を確認
sar -n DEV 2 5
ネットワーク関連の問題への対処法
接続数が異常に多い場合は、DDoS攻撃や不正なアクセスの可能性があります。ファイアウォールの設定やセキュリティ強化と組み合わせて対処しましょう。
# 接続元IPごとの接続数を集計
ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
# 特定IPからの接続をファイアウォールでブロック
sudo iptables -A INPUT -s [不正なIP] -j DROP
統合的な監視とアラート設定
個別のコマンドでの監視に加えて、統合的な監視体制を構築することで、より効率的な運用が可能になります。
sarコマンドで履歴データを収集する
sarコマンド(sysstatパッケージ)を使えば、パフォーマンスデータを自動的に蓄積し、過去にさかのぼって分析できます。
# sysstatのインストールと有効化
sudo apt install -y sysstat
sudo systemctl enable sysstat
sudo systemctl start sysstat
# 過去のCPU使用率を確認
sar -u
# 過去のメモリ使用率を確認
sar -r
# 特定日のデータを確認
sar -u -f /var/log/sysstat/sa20
シェルスクリプトによる簡易監視アラート
高価な監視ツールを導入しなくても、シェルスクリプトとcronを組み合わせれば、簡易的な監視とアラートが実現できます。
#!/bin/bash
# /usr/local/bin/server-monitor.sh
THRESHOLD_CPU=80
THRESHOLD_MEM=90
THRESHOLD_DISK=85
ALERT_EMAIL="admin@example.com"
# CPU使用率チェック
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print int($2 + $4)}')
if [ "$CPU_USAGE" -gt "$THRESHOLD_CPU" ]; then
echo "警告: CPU使用率が${CPU_USAGE}%です" | mail -s "[Alert] CPU使用率超過" $ALERT_EMAIL
fi
# メモリ使用率チェック
MEM_USAGE=$(free | grep Mem | awk '{print int($3/$2 * 100)}')
if [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then
echo "警告: メモリ使用率が${MEM_USAGE}%です" | mail -s "[Alert] メモリ使用率超過" $ALERT_EMAIL
fi
# ディスク使用率チェック
DISK_USAGE=$(df -h / | tail -1 | awk '{print int($5)}')
if [ "$DISK_USAGE" -gt "$THRESHOLD_DISK" ]; then
echo "警告: ディスク使用率が${DISK_USAGE}%です" | mail -s "[Alert] ディスク使用率超過" $ALERT_EMAIL
fi
このスクリプトをcronに登録して定期実行します。cronの設定方法はLinuxのcronとスケジュールタスクを参照してください。
# 5分ごとに監視スクリプトを実行
*/5 * * * * /usr/local/bin/server-monitor.sh
本格的な監視ツールの導入
サーバー台数が増えてきた場合や、より詳細な監視が必要な場合は、以下のツールの導入を検討しましょう。
- Prometheus + Grafana:メトリクス収集と可視化のオープンソースコンビ。Dockerで簡単にデプロイ可能
- Zabbix:エンタープライズ級の監視ツール。エージェント型で詳細なデータ収集が可能
- Netdata:インストールが簡単で、リアルタイム監視に特化したツール
- Mackerel:日本発のSaaS型監視サービス。セットアップが簡単で中小企業に人気
パフォーマンス問題の体系的な調査手順
サーバーのパフォーマンスに問題が発生した場合、以下の手順で体系的に調査すると効率的です。
ステップ1:全体像の把握
# uptimeでシステムの負荷を素早く確認
uptime
# 出力例: 14:23:45 up 30 days, 2:15, 3 users, load average: 4.32, 3.18, 2.85
# load averageが CPUコア数を超えている場合、処理待ちが発生している
# dmesgでカーネルのメッセージを確認
dmesg | tail -20
ステップ2:リソースのボトルネック特定
# CPU・メモリ・I/Oを一度に確認
vmstat 2 5
# プロセスごとのリソース使用状況
top -bn1 | head -30
ステップ3:原因プロセスの特定と対処
# CPU使用率の高いプロセス
ps aux --sort=-%cpu | head -10
# メモリ使用量の多いプロセス
ps aux --sort=-%mem | head -10
# I/Oを多く使用しているプロセス
sudo iotop -b -n 3
この調査手順は、Linuxトラブルシューティングガイドでもさらに詳しく解説しています。
まとめ:日常的な監視で安定したサーバー運用を実現しよう
本記事では、Linuxサーバーのパフォーマンス監視について、CPU・メモリ・ディスク・ネットワークの各リソースの監視方法と対処法を解説しました。
- CPU:topやhtopでリアルタイム監視し、高負荷プロセスを特定して対処する
- メモリ:freeコマンドのavailable値に注目し、Swap使用量の増加を警戒する
- ディスク:容量とI/Oの両面から監視し、ログの肥大化に注意する
- ネットワーク:接続数と帯域を監視し、異常なトラフィックを検知する
- sarコマンドやシェルスクリプトで自動監視とアラートを仕組み化する
パフォーマンス監視は、問題が起きてからではなく日常的に行うことが重要です。まずは基本的なコマンドでの確認を習慣化し、徐々に監視体制を整えていきましょう。
関連する知識として、Linuxカーネルチューニングの基礎やバックアップと復元もあわせて学ぶと、より包括的なサーバー運用スキルが身につきます。AIを活用した運用効率化に興味がある方は、Claude Codeセットアップガイドもぜひご覧ください。
関連記事
AWS CloudFrontでサイト高速化|CDN設定からキャッシュ戦略まで実践解説
AWS CloudWatchで監視・アラート設定|運用担当者のための実践ガイド
AWS CodePipelineでCI/CD構築|コード変更から本番デプロイまでの自動化
AWS Cost Explorerでコスト可視化|ムダを見つけて月額費用を削減する実践術
AWS ECS/Fargateでコンテナ運用|Docker→本番デプロイの実践ガイド
AWS IAMのベストプラクティス|最小権限の原則を実務で実装する方法
AWS RDSの実務ガイド|データベース構築・バックアップ・パフォーマンスチューニング
AWS S3の実務活用ガイド|バケット設計・アクセス制御・コスト最適化の実践