PR

【完全解説】WSL Ubuntuでプロセス状態を詳細確認!ps・topコマンドの実践ガイド

はじめに

WSL(Windows Subsystem for Linux)上のUbuntuで作業していると、プロセスの負荷や実行状態を確認したくなる場面があります。特に開発環境では、メモリリークやCPU使用率の異常を早期発見することが、システムの安定運用とコスト最適化に直結します。本記事では、プロセス情報の取得・解析に役立つコマンドの使い方を実践的に解説します。

1. ps コマンドの基礎と応用

基本構文

ps aux
オプション説明
aすべてのユーザーのプロセス表示
uユーザー形式(UID、%CPUなど)表示
x制御端末のないプロセスも表示

出力例と各項目の意味

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu    1752  0.0  0.1  99832  7264 ?        Ss   09:34   0:00 /lib/systemd/systemd
python3   2341  15.2  8.3 245600 32768 pts/1   R+   10:15   2:34 python app.py
意味実用性
USERプロセス所有者セキュリティ監査に重要
PIDプロセスIDkill操作やデバッグで必須
%CPUCPU使用率パフォーマンス最適化の指標
%MEMメモリ使用率メモリリーク検出に活用
VSZ仮想メモリサイズ(KB)メモリ割り当て状況を把握
RSS常駐メモリサイズ(KB)実際のメモリ消費量
STATプロセス状態問題のあるプロセスを特定
TIME累積CPU時間長時間実行プロセスの監視
COMMAND実行されたコマンドプロセスの特定と分析

STATの詳細解釈

状態意味対処が必要なケース
R実行中(Running)CPU使用率が異常に高い場合
Sスリープ(Sleeping)通常は問題なし
D割り込み不可スリープI/O待ちで長時間続く場合は要注意
Zゾンビ(Zombie)親プロセスに問題がある可能性
T一時停止(Stopped)意図しない停止の場合は確認要
+フォアグラウンド

高度なps活用法

特定条件でフィルタリング

# CPU使用率5%以上のプロセスのみ表示
ps aux | awk '$3 > 5.0'

# メモリ使用量でソート(降順)
ps aux --sort=-%mem | head -10

# 特定ユーザーのプロセスのみ
ps -u ubuntu

# 特定コマンドを含むプロセス
ps aux | grep python

2. プロセスツリーの可視化

基本的なツリー表示

ps -ejH
# または
ps axjf

より詳細なツリー表示

# pstreeコマンド(要インストール)
sudo apt install psmisc
pstree -p
pstree -up  # ユーザー名付き

実用例:

# Dockerコンテナ内のプロセス階層を確認
pstree -p $(pgrep dockerd)

# Node.jsアプリケーションの子プロセス確認
pstree -p $(pgrep node)

3. top コマンドの実践活用

基本起動と操作

top
キー機能実用場面
PCPU使用率で並び替えCPU負荷の原因特定
Mメモリ使用量で並び替えメモリリーク検出
T時間(CPU TIME)で並び替え長時間実行プロセス特定
k任意のPIDをkill異常プロセスの終了
rプロセス優先度変更重要プロセスの優先度調整
1CPU毎の使用率表示マルチコア環境での負荷分散確認

カスタマイズされた表示

# 特定プロセスのみ監視
top -p 1234,5678

# バッチモードで1回だけ実行(スクリプト用)
top -b -n 1

# 更新間隔を変更(デフォルト3秒)
top -d 1

topの出力を解析用に保存

# ログファイルに出力
top -b -n 10 -d 1 > process_monitor.log

# 特定時間帯のプロセス監視
while true; do
  echo "$(date): $(top -b -n 1 | head -15)" >> hourly_process.log
  sleep 3600
done

4. htopによる視覚的監視

インストールと基本使用

sudo apt update
sudo apt install htop
htop

htopの利点

  • カラー表示でCPU/メモリ使用率を直感的に把握
  • マウス操作対応
  • ツリー表示(F5キー)が見やすい
  • 検索機能(F3キー)でプロセス名から素早く特定

5. 実践的なトラブルシューティング手順

ケース1: システムが重い場合

# 1. 全体的な負荷状況を確認
top

# 2. CPU使用率上位10プロセスを特定
ps aux --sort=-%cpu | head -11

# 3. メモリ使用率上位10プロセスを特定
ps aux --sort=-%mem | head -11

# 4. 詳細情報を取得
ps -p <PID> -o pid,ppid,cmd,%cpu,%mem,vsz,rss,stat,start,time

ケース2: メモリリークの疑い

# 特定プロセスのメモリ使用量を継続監視
while true; do
  echo "$(date): $(ps -p <PID> -o %mem,rss)"
  sleep 60
done

ケース3: ゾンビプロセスの処理

# ゾンビプロセスを特定
ps aux | awk '$8 ~ /^Z/ { print $2, $11 }'

# 親プロセスを特定して対処
ps -eo pid,ppid,stat,comm | grep Z

6. 自動化とスクリプト活用

プロセス監視スクリプト例

#!/bin/bash
# process_monitor.sh

THRESHOLD_CPU=80
THRESHOLD_MEM=90
LOG_FILE="/var/log/process_monitor.log"

while true; do
    # CPU使用率が閾値を超えるプロセスをチェック
    HIGH_CPU=$(ps aux | awk -v threshold=$THRESHOLD_CPU '$3 > threshold {print $2, $3, $11}')
    
    if [[ -n "$HIGH_CPU" ]]; then
        echo "$(date): HIGH CPU USAGE DETECTED" >> $LOG_FILE
        echo "$HIGH_CPU" >> $LOG_FILE
    fi
    
    # メモリ使用率が閾値を超えるプロセスをチェック
    HIGH_MEM=$(ps aux | awk -v threshold=$THRESHOLD_MEM '$4 > threshold {print $2, $4, $11}')
    
    if [[ -n "$HIGH_MEM" ]]; then
        echo "$(date): HIGH MEMORY USAGE DETECTED" >> $LOG_FILE
        echo "$HIGH_MEM" >> $LOG_FILE
    fi
    
    sleep 300  # 5分間隔
done

7. その他の有用なプロセス管理コマンド

pidstat(sysstatパッケージ)

sudo apt install sysstat

# 1秒間隔でプロセス統計を5回表示
pidstat 1 5

# 特定プロセスの詳細統計
pidstat -p <PID> 1

/procファイルシステムの活用

# プロセスの詳細情報
cat /proc/<PID>/status
cat /proc/<PID>/cmdline
cat /proc/<PID>/environ

# プロセスが開いているファイル
ls -la /proc/<PID>/fd/

ROI・効率化の観点

監視の自動化による効果

  1. システム障害の早期発見: ダウンタイム削減により機会損失を最小化
  2. リソース最適化: 不要なプロセス特定により、インフラコスト削減
  3. 開発効率向上: パフォーマンスボトルネック特定により、デバッグ時間短縮

推奨する運用フロー

  1. 定期監視: cronでプロセス統計を自動収集
  2. 閾値設定: CPU/メモリ使用率に基づくアラート設定
  3. ログ分析: 異常パターンの傾向分析
  4. 自動対処: 特定条件下での自動プロセス再起動

まとめ

WSL上のUbuntuでのプロセス管理は、pstophtopの組み合わせにより、システムの可視性と制御性を大幅に向上させます。特に開発・運用環境では、これらのツールを使いこなすことで:

  • 問題の早期発見と対処時間の短縮
  • リソース使用量の最適化によるコスト削減
  • システムの安定性向上による機会損失防止

が実現できます。日常的な監視習慣の確立が、長期的な運用効率とROI向上につながります。

関連記事(推奨)

  • WSLでメモリ制限をかける方法
  • Ubuntuのプロセス起動時ログを監視するtips
  • Linuxプロセス管理に強くなるための実践演習集
  • Docker環境でのプロセス監視ベストプラクティス

コメント

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