メインコンテンツへスキップ
中級10分で読める

topでリソース監視

Linuxのtopコマンドを使って、システムリソースの使用状況をリアルタイムで監視する方法を実例を交えて詳しく解説します。

システム編topリソース監視CPUメモリプロセス管理

🎯 この記事で学べること

  • 1
    `top`コマンドの基本的な使い方と画面の見方をマスターできます
  • 2
    CPU使用率、メモリ使用量、負荷平均の意味を理解できます
  • 3
    対話的な操作(ソート、フィルタ、プロセス制御)ができるようになります
  • 4
    システムの問題を素早く発見し、原因を特定する方法を学べます
  • 5
    バッチモードを使った自動監視スクリプトの作成方法がわかります

読了時間: 約10

システムの健康状態をリアルタイムで見よう!

こんにちは!今回は、Linuxシステムの「健康診断」ができるtopコマンドについて学んでいきましょう。

パソコンが重い時、「何が原因だろう?」と思ったことはありませんか?Windowsならタスクマネージャーを開きますよね。Linuxでは、topコマンドがその役割を果たしてくれます。しかも、もっと詳しい情報が見られるんですよ!

基本的な使い方

まずは起動してみよう

topコマンドは、とてもシンプルに起動できます:

$ top

すると、こんな画面が表示されます(自動的に更新され続けます):

top - 15:20:30 up 10 days,  3:45,  2 users,  load average: 0.15, 0.20, 0.18
Tasks: 256 total,   1 running, 255 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.3 us,  2.1 sy,  0.0 ni, 92.3 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :  16000.0 total,   2000.0 free,   8000.0 used,   6000.0 buff/cache
MiB Swap:   8000.0 total,   8000.0 free,      0.0 used.   7500.0 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 user      20   0  500000  50000  20000 S  25.0   3.1   1:23.45 firefox
 5678 user      20   0  300000  30000  15000 S  12.5   1.9   0:45.67 code

topは対話的なツールです。画面がリアルタイムで更新されるので、終了したい時はqキーを押してくださいね!

画面の見方をマスターしよう

システム概要(ヘッダー部分)

画面の上部には、システム全体の状態が表示されています。一つずつ見ていきましょう!

1行目:基本情報

top - 15:20:30 up 10 days,  3:45,  2 users,  load average: 0.15, 0.20, 0.18
  • 15:20:30 - 現在時刻
  • up 10 days, 3:45 - システムが起動してからの時間(10日と3時間45分)
  • 2 users - ログイン中のユーザー数
  • load average: 0.15, 0.20, 0.18 - 負荷平均(1分、5分、15分)

負荷平均は、CPUコア数と比較して見ましょう。4コアのCPUなら、負荷平均が4.0でちょうど100%使用中という意味です!

2行目:タスク(プロセス)の状態

Tasks: 256 total,   1 running, 255 sleeping,   0 stopped,   0 zombie
  • total - プロセスの総数
  • running - 実行中(CPUを使用中)
  • sleeping - 待機中(正常な状態)
  • stopped - 停止中
  • zombie - ゾンビプロセス(問題があるかも!)

3行目:CPU使用率の内訳

%Cpu(s):  5.3 us,  2.1 sy,  0.0 ni, 92.3 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 st
  • us (user) - ユーザープログラムが使用
  • sy (system) - システム(カーネル)が使用
  • id (idle) - 何もしていない(これが高いと余裕がある)
  • wa (wait) - ディスクI/O待ち(高いと遅い原因かも)

4-5行目:メモリ使用状況

MiB Mem :  16000.0 total,   2000.0 free,   8000.0 used,   6000.0 buff/cache
MiB Swap:   8000.0 total,   8000.0 free,      0.0 used.   7500.0 avail Mem
  • total - 総メモリ量
  • free - 未使用メモリ
  • used - 使用中メモリ
  • buff/cache - バッファ・キャッシュ(必要に応じて解放される)
  • avail Mem - 実際に利用可能なメモリ(これが重要!)

「free」が少なくても慌てないで!Linuxは効率化のためにメモリをキャッシュに使います。「avail Mem」を見ましょう。

プロセス一覧の見方

各プロセスの情報が表示されます:

  • PID - プロセスID(プロセスの番号)
  • USER - 実行ユーザー
  • %CPU - CPU使用率
  • %MEM - メモリ使用率
  • TIME+ - 累計CPU使用時間
  • COMMAND - 実行コマンド

🎮 理解度チェック

Q1: 負荷平均が「2.0, 1.5, 1.0」で、CPUが2コアの場合、システムの状態は?

負荷平均が「2.0, 1.5, 1.0」で、CPUが2コアの場合、システムの状態は?

対話的な操作をマスターしよう

topの本当の力は、実行中の操作にあります!

ソート操作(これが便利!)

| キー | 機能 | 使いどころ | |-----|------|-----------| | P | CPU使用率でソート | どのプロセスがCPUを食っているか調べる | | M | メモリ使用率でソート | メモリを大量に使っているプロセスを見つける | | T | 実行時間でソート | 長時間動いているプロセスを確認 | | N | PID順でソート | プロセスIDで整理して見たい時 |

システムが重い時は、まずPキーを押してCPU使用率でソート!犯人がすぐ見つかりますよ。

表示の切り替え

| キー | 機能 | |-----|------| | 1 | CPU別の使用率を表示(マルチコアの場合) | | t | タスク/CPU表示の切り替え | | m | メモリ表示の切り替え | | c | コマンドの完全パス表示 | | V | プロセスツリー表示 |

プロセスを操作する

| キー | 機能 | 注意点 | |-----|------|--------| | k | プロセスを終了(kill) | PIDを入力後、シグナルを選択 | | r | 優先度(nice値)を変更 | マイナス値にはroot権限が必要 |

フィルタリング

| キー | 機能 | |-----|------| | u | 特定ユーザーのプロセスのみ表示 | | o | カスタムフィルターを追加 | | = | すべてのフィルターをクリア |

🎮 理解度チェック

Q2: メモリを大量に使っているプロセスを見つけたい時、最初に押すキーは?

メモリを大量に使っているプロセスを見つけたい時、最初に押すキーは?

起動オプションを活用しよう

更新間隔を変更

# 1秒ごとに更新(デフォルトは3秒)
$ top -d 1

# 0.5秒ごとに高速更新
$ top -d 0.5

バッチモード(スクリプトで使える!)

# 1回だけ実行して終了
$ top -b -n 1

# CPU使用率TOP10を取得
$ top -b -n 1 | head -17 | tail -10

# ログファイルに保存
$ top -b -n 1 > system_status.log

特定のプロセスだけ監視

# 特定のPIDを監視
$ top -p 1234

# 複数のPIDを監視
$ top -p 1234,5678

# firefoxのプロセスを監視
$ top -p $(pgrep firefox | tr '\n' ',')

実践的な使い方

システムが重い原因を調査

#!/bin/bash
# CPU使用率が高いプロセスを記録

echo "=== High CPU Processes at $(date) ===" >> cpu_log.txt
top -b -n 1 | awk 'NR>7 && $9>20.0 {print $0}' >> cpu_log.txt

メモリ不足の監視

#!/bin/bash
# 利用可能メモリが1GB以下になったら警告

while true; do
    avail=$(top -b -n 1 | grep "avail Mem" | awk '{print $8}')
    if (( $(echo "$avail < 1000" | bc -l) )); then
        echo "警告: 利用可能メモリが少なくなっています: ${avail}MB"
    fi
    sleep 60
done

定期的なシステム状態の記録

#!/bin/bash
# 5分ごとにシステム状態を記録

LOG_DIR="/var/log/system_monitor"
mkdir -p $LOG_DIR

while true; do
    timestamp=$(date +%Y%m%d_%H%M%S)
    top -b -n 1 > "$LOG_DIR/top_${timestamp}.log"
    sleep 300
done

カスタマイズと設定

よく使う設定を保存

topの画面で設定を変更した後、W(大文字)を押すと設定が保存されます:

# 設定ファイルの場所
~/.toprc

カラー表示の設定

  • z - カラー表示のON/OFF
  • Z - カラースキームの変更

表示フィールドのカスタマイズ

fキーを押すと、表示するフィールドを選択できます。よく追加されるフィールド:

  • PPID - 親プロセスID
  • nTH - スレッド数
  • P - 最後に使用したCPU

トラブルシューティング

負荷平均が高い場合

# CPUコア数を確認
$ nproc
4

# 負荷平均が4を超えていたら高負荷
# topでCPU使用率の高いプロセスを特定

メモリ不足の診断

  1. avail Memを確認(これが重要!)
  2. スワップ使用量が増えていないか確認
  3. Mキーでメモリ使用量順にソート

ゾンビプロセスの対処

# ゾンビプロセスの親を見つける
$ ps aux | grep defunct
$ kill -TERM 親プロセスID

🎮 理解度チェック

Q3: topのバッチモードを使う主な目的は?

topのバッチモードを使う主な目的は?

より高度なツール

htop(見やすい!)

$ sudo apt install htop  # Ubuntu/Debian
$ htop

# マウスでクリックできる
# カラフルで見やすい
# プロセスツリーが標準表示

glances(総合監視)

$ pip install glances
$ glances

# ネットワーク、ディスク情報も表示
# Webインターフェースもある

ベストプラクティス

エイリアスを作ろう

# ~/.bashrcに追加
alias topc='top -o %CPU'     # CPU順
alias topm='top -o %MEM'     # メモリ順
alias topu='top -u $USER'    # 自分のプロセスのみ

監視の自動化

#!/bin/bash
# 高負荷を自動検出して通知

check_high_load() {
    load=$(uptime | awk -F'load average:' '{print $2}' | awk -F, '{print $1}')
    cores=$(nproc)
    
    if (( $(echo "$load > $cores" | bc -l) )); then
        echo "高負荷検出: Load=$load (CPU=$cores cores)"
        # メール送信やSlack通知など
    fi
}

# 5分ごとにチェック
while true; do
    check_high_load
    sleep 300
done

📝 まとめ

今回はtopコマンドについて学びました!

  • topはシステムの状態をリアルタイムで監視するツール
  • CPU使用率、メモリ使用量、負荷平均などが一目でわかる
  • PでCPU順、Mでメモリ順にソートが基本操作
  • qで終了、kでプロセス終了、rで優先度変更
  • バッチモード(-b)でスクリプト化も可能

topコマンドは、システムの「健康診断」をする医者のようなもの。定期的にチェックすることで、問題を早期発見できます。まずは起動して、PMキーを使ってみることから始めましょう!

次はdfとduコマンドでディスク使用量の確認方法を学びます。システムリソースの監視を完璧にマスターしましょう!

YouTube動画で復習

動画でさらに詳しく学びたい方は、CommandAcademyのYouTubeチャンネルをチェック!視覚的にコマンドの動作を確認できます。

最初は情報量が多くて圧倒されるかもしれませんが、基本的には「CPU使用率」と「メモリ使用量」を見ることから始めれば大丈夫です。慣れてきたら、他の情報も活用していきましょう!