Linuxサーバーのパフォーマンス監視入門|CPU・メモリ・ディスクの見方と対処法

kento_morota 15分で読めます

「最近サーバーが遅い気がする」「突然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セットアップガイドもぜひご覧ください。

#Linux#パフォーマンス#監視
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

プライバシーポリシーに基づき管理します

AI活用のヒントをお探しですか?お気軽にご相談ください。

まずは話だけ聞いてもらう