はじめに
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 | プロセスID | kill操作やデバッグで必須 |
%CPU | CPU使用率 | パフォーマンス最適化の指標 |
%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
キー | 機能 | 実用場面 |
---|---|---|
P | CPU使用率で並び替え | CPU負荷の原因特定 |
M | メモリ使用量で並び替え | メモリリーク検出 |
T | 時間(CPU TIME)で並び替え | 長時間実行プロセス特定 |
k | 任意のPIDをkill | 異常プロセスの終了 |
r | プロセス優先度変更 | 重要プロセスの優先度調整 |
1 | CPU毎の使用率表示 | マルチコア環境での負荷分散確認 |
カスタマイズされた表示
# 特定プロセスのみ監視
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・効率化の観点
監視の自動化による効果
- システム障害の早期発見: ダウンタイム削減により機会損失を最小化
- リソース最適化: 不要なプロセス特定により、インフラコスト削減
- 開発効率向上: パフォーマンスボトルネック特定により、デバッグ時間短縮
推奨する運用フロー
- 定期監視: cronでプロセス統計を自動収集
- 閾値設定: CPU/メモリ使用率に基づくアラート設定
- ログ分析: 異常パターンの傾向分析
- 自動対処: 特定条件下での自動プロセス再起動
まとめ
WSL上のUbuntuでのプロセス管理は、ps
、top
、htop
の組み合わせにより、システムの可視性と制御性を大幅に向上させます。特に開発・運用環境では、これらのツールを使いこなすことで:
- 問題の早期発見と対処時間の短縮
- リソース使用量の最適化によるコスト削減
- システムの安定性向上による機会損失防止
が実現できます。日常的な監視習慣の確立が、長期的な運用効率とROI向上につながります。
関連記事(推奨)
- WSLでメモリ制限をかける方法
- Ubuntuのプロセス起動時ログを監視するtips
- Linuxプロセス管理に強くなるための実践演習集
- Docker環境でのプロセス監視ベストプラクティス
コメント