LinuxでCPU使用率を監視する方法|トラブル防止のポイントも解説

Linux

サーバーや業務システムでLinuxを使っていて、こんな経験はありませんか?

  • 「気づいたら負荷が高くて処理が遅くなっていた」
  • 「いつの間にかサーバーが重くなって、ユーザーから苦情が…」
  • 「システムが突然停止して、原因がわからない」
  • 「アクセスが増えたときに、どこまで耐えられるかわからない」
  • 「障害が起きてから慌てて調査する羽目に…」

こうしたトラブルを未然に防ぐには、日ごろからCPU使用率を監視することが欠かせません。

CPU使用率の監視は、システム管理の最も基本的でありながら重要な作業の一つです。

この記事では:

  • CPU使用率監視の重要性と基本概念
  • Linuxでの基本的な監視コマンドとその使い分け
  • 自動監視ツールの導入と活用方法
  • 効果的な監視のためのベストプラクティス
  • 実際のトラブル事例と対処法

を実践的な観点から詳しく解説します。これを読めば、システムの安定稼働に欠かせないCPU監視のスキルが身につきます!

スポンサーリンク
  1. CPU使用率を監視する理由と重要性
    1. CPUの役割とシステムへの影響
    2. CPU使用率上昇による問題
    3. 実際のトラブル事例
    4. 監視の経済的メリット
  2. LinuxでCPU使用率を確認する基本コマンド
    1. top コマンド:リアルタイム監視の定番
    2. topコマンドの詳しい見方
    3. 重要な指標の解説
    4. topコマンドの便利なオプション
    5. htop:topの進化版
  3. より詳細なCPU監視コマンド
    1. mpstat:マルチコアCPUの詳細監視
    2. sar:システム活動レポート
    3. iostat:I/O統計とCPU使用率
  4. プロセス別CPU使用率の詳細分析
    1. ps コマンドでの詳細確認
    2. プロセス単位での深掘り調査
  5. 自動監視ツールの導入と活用
    1. Nagios:エンタープライズレベルの監視
    2. Zabbix:統合監視プラットフォーム
    3. Prometheus + Grafana:現代的な監視スタック
    4. Netdata:リアルタイム可視化
  6. 監視のベストプラクティス
    1. 適切なしきい値の設定
    2. 監視間隔の最適化
    3. 効果的なアラート設定
  7. 意外と見落としがちなCPU監視のコツ
    1. iowait の重要性
    2. ロードアベレージとCPU使用率の関係
    3. プロセス優先度の活用
    4. コンテキストスイッチの監視
  8. ログ記録と分析の重要性
    1. 長期データの保存
    2. カスタムログの作成
  9. トラブルシューティングの実践例
    1. 高負荷の原因特定
    2. 負荷軽減の実践的手法
  10. まとめ:効果的なCPU監視で安定運用を実現
    1. 監視レベル別の推奨アプローチ
    2. 今日から始める3ステップ

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ステップ

  1. 基本コマンド習得:top、htop、mpstatを使いこなす
  2. 監視ツール導入:NetdataやPrometheusで可視化
  3. 運用の自動化:アラート設定と対応手順の整備

コメント

タイトルとURLをコピーしました