サーバーや業務システムでLinuxを使っていて、こんな経験はありませんか?
- 「気づいたら負荷が高くて処理が遅くなっていた」
- 「いつの間にかサーバーが重くなって、ユーザーから苦情が…」
- 「システムが突然停止して、原因がわからない」
- 「アクセスが増えたときに、どこまで耐えられるかわからない」
- 「障害が起きてから慌てて調査する羽目に…」
こうしたトラブルを未然に防ぐには、日ごろからCPU使用率を監視することが欠かせません。
CPU使用率の監視は、システム管理の最も基本的でありながら重要な作業の一つです。
この記事では:
- CPU使用率監視の重要性と基本概念
- Linuxでの基本的な監視コマンドとその使い分け
- 自動監視ツールの導入と活用方法
- 効果的な監視のためのベストプラクティス
- 実際のトラブル事例と対処法
を実践的な観点から詳しく解説します。これを読めば、システムの安定稼働に欠かせないCPU監視のスキルが身につきます!
CPU使用率を監視する理由と重要性

CPUの役割とシステムへの影響
CPUはコンピュータの「頭脳」
CPUはコンピュータシステムの中核となる処理装置で、すべての計算処理とプログラムの実行を担当します。その稼働率(CPU使用率)が高い状態が続くと、システム全体に深刻な影響を与えます。
CPU使用率上昇による問題
使用率レベル | 影響 | 具体的な症状 |
---|---|---|
70-80% | 軽度の性能低下 | 応答がやや遅くなる |
80-90% | 中程度の問題 | 明らかな処理遅延、待ち時間発生 |
90-95% | 深刻な状態 | 新しい処理を受け付けられない |
95%以上 | 危険レベル | システム停止の可能性 |
主な問題
- 処理待ちの増加:新しい処理要求が待機状態になる
- 応答性の悪化:アプリケーションの反応が遅くなる
- スループットの低下:全体的な処理能力が下がる
- システム停止リスク:最悪の場合、サービスが完全に停止
実際のトラブル事例
Webサーバーでの障害事例
ある企業のWebサイトで、新商品発表と同時にアクセスが急増。CPU使用率が95%を超えた状態が数時間続き、以下の問題が発生:
- ページの読み込み時間が通常の10倍に延長
- 新規ユーザーのアクセスが全く受け付けられない状態
- データベース接続がタイムアウトしてエラーが多発
- 最終的にサービス停止で機会損失が発生
事前監視があれば防げたポイント
- CPU使用率80%でアラートを設定していれば早期発見
- 負荷分散の追加やプロセス調整で対応可能
- スケールアウトの準備ができていた
監視の経済的メリット
予防的監視のROI(投資収益率)
- 障害発生コスト:数時間のサービス停止で数百万円の損失
- 監視システム導入コスト:月数万円程度
- 人的コスト削減:自動監視により24時間体制が不要
CPU使用率の監視は「安定稼働への投資」として、非常に高い効果が期待できます。
LinuxでCPU使用率を確認する基本コマンド

top コマンド:リアルタイム監視の定番
最も一般的で直感的な監視ツール
top
topコマンドの詳しい見方
top - 15:30:45 up 10 days, 3:45, 2 users, load average: 0.75, 0.85, 0.90
Tasks: 180 total, 2 running, 178 sleeping, 0 stopped, 0 zombie
%Cpu(s): 12.5 us, 2.1 sy, 0.0 ni, 84.9 id, 0.3 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 8192000 total, 2048000 free, 4096000 used, 2048000 buff/cache
KiB Swap: 2097152 total, 2097152 free, 0 used, 5120000 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 apache 20 0 123456 45678 12345 S 25.5 2.8 0:45.67 httpd
5678 mysql 20 0 567890 234567 56789 S 18.2 5.7 2:34.56 mysqld
重要な指標の解説
ヘッダー情報
load average
:システムの平均負荷(1分、5分、15分平均)Tasks
:プロセスの状態別集計
CPU使用率の内訳
%us (user)
:ユーザープロセスが使用%sy (system)
:システム(カーネル)が使用%ni (nice)
:優先度変更されたプロセス%id (idle)
:アイドル(空き)状態%wa (iowait)
:I/O待ちで待機中%hi (hardware interrupt)
:ハードウェア割り込み処理%si (software interrupt)
:ソフトウェア割り込み処理
topコマンドの便利なオプション
更新間隔の調整
top -d 5 # 5秒間隔で更新
特定ユーザーのプロセスのみ表示
top -u apache # apacheユーザーのプロセスのみ
バッチモードでの出力
top -b -n 1 # 1回だけ出力してログに記録
htop:topの進化版
より見やすく高機能な監視ツール
# インストール(Ubuntu/Debian)
sudo apt install htop
# インストール(CentOS/RHEL)
sudo yum install htop
# 実行
htop
htopの特徴
- カラフルで見やすい表示
- マウス操作対応
- CPUコア別の使用率表示
- プロセスのツリー表示
- 検索・フィルタ機能
より詳細なCPU監視コマンド

mpstat:マルチコアCPUの詳細監視
複数CPUコアの使用率を個別に確認
# 全CPUコアの情報を1秒間隔で表示
mpstat -P ALL 1
# 特定時間だけ監視(1秒間隔で10回)
mpstat -P ALL 1 10
出力例と解説
Linux 5.4.0-74-generic (server01) 06/15/2024 _x86_64_ (4 CPU)
03:45:23 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
03:45:24 PM all 12.50 0.00 2.25 0.25 0.00 0.25 0.00 0.00 0.00 84.75
03:45:24 PM 0 15.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 0.00 82.00
03:45:24 PM 1 18.00 0.00 2.00 1.00 0.00 1.00 0.00 0.00 0.00 78.00
03:45:24 PM 2 8.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 91.00
03:45:24 PM 3 10.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 0.00 87.00
sar:システム活動レポート
履歴データの収集と分析に最適
# CPU使用率を1秒間隔で3回表示
sar -u 1 3
# 過去24時間のCPU使用率
sar -u -f /var/log/sa/sa$(date +%d -d yesterday)
# 特定時間帯のデータ
sar -u -s 09:00:00 -e 17:00:00
sarの自動データ収集設定
# sysstatパッケージのインストール
sudo apt install sysstat
# データ収集の有効化
sudo systemctl enable sysstat
sudo systemctl start sysstat
iostat:I/O統計とCPU使用率
I/O待ちとCPU使用率の関係を分析
# CPU使用率とI/O統計を同時表示
iostat -c -d 1
# 拡張統計情報
iostat -x 1
プロセス別CPU使用率の詳細分析

ps コマンドでの詳細確認
CPU使用率順でプロセス一覧
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -20
特定プロセスの継続監視
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -10'
プロセス単位での深掘り調査
特定プロセスのリソース使用詳細
# プロセスIDを指定して詳細情報
top -p 1234
# プロセスの詳細統計
cat /proc/1234/stat
cat /proc/1234/status
プロセスのCPU使用履歴
# pidstatコマンド(sysstatパッケージ)
pidstat -p 1234 1
# 全プロセスのCPU使用率監視
pidstat 1
自動監視ツールの導入と活用
Nagios:エンタープライズレベルの監視
Nagiosの特徴と利点
- 豊富なプラグインエコシステム
- 複雑な依存関係の管理
- エスカレーション機能
- 豊富な通知オプション
CPU監視の設定例
# /etc/nagios/nrpe.cfg
command[check_cpu]=check_cpu -w 80 -c 95
# サービス定義
define service{
use generic-service
host_name web-server-01
service_description CPU Load
check_command check_nrpe!check_cpu
notification_interval 30
}
Zabbix:統合監視プラットフォーム
Zabbixの主な機能
- Webベースの直感的なインターフェース
- 自動ディスカバリー機能
- 豊富なグラフとダッシュボード
- テンプレート機能
CPU監視アイテムの設定
Key: system.cpu.util[,user,avg1]
Name: CPU utilization (user time)
Type: Zabbix agent
Update interval: 60s
History storage period: 90d
Trend storage period: 5y
Prometheus + Grafana:現代的な監視スタック
Prometheusでのメトリクス収集
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node-exporter'
static_configs:
- targets: ['localhost:9100']
Node Exporterでのシステムメトリクス
# Node Exporterのインストールと起動
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xzf node_exporter-1.3.1.linux-amd64.tar.gz
./node_exporter
Netdata:リアルタイム可視化
Netdataの特徴
- ゼロコンフィグレーションで即座に開始
- 美しいリアルタイムグラフ
- 軽量で高速
- Webブラウザーでアクセス可能
インストールと設定
# ワンライナーでインストール
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# サービス開始
sudo systemctl start netdata
sudo systemctl enable netdata
# Webインターフェースにアクセス
# http://server-ip:19999
監視のベストプラクティス

適切なしきい値の設定
段階的なアラート設定
警告レベル | CPU使用率 | 対応内容 |
---|---|---|
注意 | 70% | 監視強化、原因調査開始 |
警告 | 80% | 管理者への通知、対策検討 |
重要 | 90% | 緊急対応、負荷軽減措置 |
緊急 | 95% | 即座の対応、サービス停止検討 |
監視間隔の最適化
用途別の推奨間隔
本番サーバー:30-60秒間隔
開発サーバー:1-5分間隔
バッチ処理サーバー:5-15分間隔
監視ツール自体の負荷考慮
- 監視プロセスのCPU使用率は全体の1-2%以下に抑制
- メモリ使用量も適切に制限
- ネットワーク帯域への影響を最小化
効果的なアラート設定
アラート疲れを防ぐ工夫
# 一定期間継続した場合のみアラート
if (cpu_usage > 80% for 5 minutes):
send_alert()
# エスカレーション設定
if (cpu_usage > 90% for 10 minutes):
send_urgent_alert()
意外と見落としがちなCPU監視のコツ
iowait の重要性
iowaitが高い場合の対処
iowait(%wa
)が高い場合、CPU自体は待ち状態で、ディスクI/Oがボトルネックになっています。
# I/O待ちの詳細分析
iostat -x 1
# どのプロセスがI/Oを多用しているか
iotop -ao
# ディスク使用量の確認
df -h
du -sh /var/log/*
対処方法
- ディスクの高速化(SSD化)
- ファイルシステムの最適化
- 不要なログファイルの削除
- データベースのインデックス最適化
ロードアベレージとCPU使用率の関係
ロードアベレージの正しい理解
# ロードアベレージの確認
uptime
cat /proc/loadavg
解釈の指針
- 1コアのシステム:1.0が100%利用状態
- 4コアのシステム:4.0が100%利用状態
- 継続的に1.0を超える場合は要注意
プロセス優先度の活用
nice値による優先度制御
# 低優先度でプロセス実行
nice -n 19 ./heavy-process
# 実行中プロセスの優先度変更
renice 19 -p 1234
# プロセスの現在の優先度確認
ps -eo pid,ni,cmd | grep process-name
コンテキストスイッチの監視
過度なコンテキストスイッチの検出
# コンテキストスイッチ回数の確認
vmstat 1
# より詳細な情報
sar -w 1
ログ記録と分析の重要性

長期データの保存
sarデータの活用
# 過去のCPU使用率パターン分析
sar -u -f /var/log/sa/sa15 | grep "09:"
# 月次レポートの生成
sadf -d /var/log/sa/sa* | grep "cpu" > monthly_cpu_report.csv
カスタムログの作成
独自の監視ログスクリプト
#!/bin/bash
# cpu_monitor.sh
LOG_FILE="/var/log/cpu_monitor.log"
THRESHOLD=80
while true; do
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "$TIMESTAMP CPU: ${CPU_USAGE}%" >> $LOG_FILE
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "$TIMESTAMP WARNING: High CPU usage: ${CPU_USAGE}%" >> $LOG_FILE
# アラートメール送信などの処理
fi
sleep 60
done
トラブルシューティングの実践例
高負荷の原因特定
ステップ1:全体状況の把握
# システム全体の状況確認
top
free -h
df -h
ステップ2:詳細分析
# CPU使用率上位プロセス
ps aux --sort=-%cpu | head -10
# メモリ使用率上位プロセス
ps aux --sort=-%mem | head -10
# ゾンビプロセスの確認
ps aux | grep defunct
ステップ3:原因の深掘り
# 特定プロセスの詳細調査
strace -p 1234
lsof -p 1234
pmap 1234
負荷軽減の実践的手法
即座の対応
# CPUを大量消費するプロセスの優先度下げ
renice 19 -p 1234
# 不要なサービスの停止
sudo systemctl stop unnecessary-service
# プロセス数の制限
ulimit -u 100
根本的な対策
- アプリケーションの最適化
- ハードウェアのアップグレード
- 負荷分散の導入
- キャッシュ機能の活用
まとめ:効果的なCPU監視で安定運用を実現
LinuxでのCPU使用率監視のポイント:
- 基本監視:top、htop、mpstatで現状把握
- 履歴分析:sar、iostatで傾向分析
- 自動監視:Nagios、Zabbix、Prometheusで継続監視
- 予防的対応:適切なしきい値設定と段階的アラート
監視レベル別の推奨アプローチ
基本レベル(個人・小規模)
# 日常的なチェック
htop
sar -u 1 10
# 簡単なログ記録
echo "$(date): $(uptime)" >> /var/log/system_status.log
中級レベル(チーム・中規模)
- Netdataによるリアルタイム監視
- Prometheusでのメトリクス収集
- Grafanaでのダッシュボード作成
上級レベル(企業・大規模)
- Nagios/Zabbixでの統合監視
- 自動スケーリング機能
- AIを活用した予測的監視
今日から始める3ステップ
- 基本コマンド習得:top、htop、mpstatを使いこなす
- 監視ツール導入:NetdataやPrometheusで可視化
- 運用の自動化:アラート設定と対応手順の整備
コメント