「サーバーが重い…何が原因?」「暴走しているプロセスを特定して止めたい」——そんな場面で使うのがプロセス管理コマンドです。Phase 1ではps/kill/systemctlの基本を学びました。この記事ではプロセスの概念から、top・htopの深い読み方、nice値による優先度制御まで踏み込みます。
プロセスとは?カーネルの視点で理解する
プロセスとは、実行中のプログラムに割り当てられたカーネルの管理単位です。Linuxカーネルは各プロセスに対して以下のリソースを独立して管理します。
- PID(Process ID):一意の識別番号。1番は init/systemd
- PPID(Parent PID):親プロセスのID。プロセスはツリー構造を形成
- UID/GID:プロセスを実行しているユーザー・グループ
- 仮想メモリ空間:プロセスごとに独立したアドレス空間
- ファイルディスクリプタ:開いているファイル・ソケットの一覧
プロセスの状態遷移
Linuxのプロセスは以下の状態を遷移します。ps aux の STAT 列で確認できます。
| 状態 | 記号 | 意味 |
|---|---|---|
| Running | R | 実行中またはCPUを待っている |
| Sleeping | S | 割り込み可能な待機(I/Oや信号を待つ) |
| Uninterruptible Sleep | D | 割り込み不可の待機(ディスクI/O中)。高負荷の兆候 |
| Stopped | T | シグナルで停止中(Ctrl+Zなど) |
| Zombie | Z | 終了済みだが親プロセスがwaitしていない。多発は問題あり |
ps コマンド:詳細オプション活用
# 全プロセスを標準形式で表示
$ ps aux
# プロセスツリーを表示(親子関係が視覚化される)
$ ps auxf
# 特定ユーザーのプロセスのみ
$ ps -u www-data
# CPU使用率でソート(上位10件)
$ ps aux --sort=-%cpu | head -11
# メモリ使用率でソート
$ ps aux --sort=-%mem | head -11
# スレッドも表示(-L オプション)
$ ps -eLf | grep nginx
# 特定プロセスの詳細情報
$ ps -p 1234 -o pid,ppid,user,%cpu,%mem,stat,cmd
top コマンド:リアルタイム監視を使いこなす
top はリアルタイムでシステム状態を監視するコマンドです。ヘッダー部分の読み方を理解することが重要です。
top - 14:23:01 up 10 days, 2:30, 2 users, load average: 0.52, 0.48, 0.45
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 1.2 sy, 0.0 ni, 92.8 id, 0.5 wa, 0.0 hi, 0.2 si
MiB Mem : 7823.6 total, 1205.4 free, 3102.8 used, 3515.4 buff/cache
MiB Swap: 2048.0 total, 1998.2 free, 49.8 used. 4389.2 avail Mem
- load average:1分・5分・15分の平均負荷。CPUコア数を超えると過負荷
- %Cpu wa(iowait):I/O待ちの割合。高い場合はディスクがボトルネック
- buff/cache:OSがキャッシュに使用中(必要時に自動解放)
- avail Mem:実際に使える空きメモリ(buff/cacheの解放分を含む)
top のインタラクティブコマンド
# top 起動中に使えるキー
k : 指定PIDにシグナルを送る(kill)
r : nice値を変更(renice)
P : CPU使用率でソート(デフォルト)
M : メモリ使用率でソート
T : 累積CPU時間でソート
1 : CPUコアごとの使用率を表示
u : 特定ユーザーのプロセスのみ表示
H : スレッドを表示
c : コマンドのフルパスを表示
q : 終了
# 特定ユーザーのプロセスを監視
$ top -u nginx
# 更新間隔を1秒に変更(デフォルト3秒)
$ top -d 1
# バッチモード(スクリプトでの利用に便利)
$ top -bn1 | head -20
nice / renice:プロセスの優先度を制御する
nice値はプロセスのCPUスケジューリング優先度を表します。-20(最高優先度)〜19(最低優先度)の範囲で、デフォルトは0です。一般ユーザーは優先度を下げる方向(0〜19)しか変更できません。優先度を上げる(負の値)にはroot権限が必要です。
# nice値を10に設定してコマンドを実行(CPU優先度を下げる)
$ nice -n 10 ./backup.sh
# 実行中のプロセスのnice値を変更(PIDを指定)
$ renice -n 5 -p 1234
# root権限で優先度を上げる(負の値)
$ sudo renice -n -5 -p 1234
# 現在のnice値を確認
$ ps -o pid,ni,cmd -p 1234
htop:top の強化版
# インストール
$ sudo apt install htop # Ubuntu/Debian
$ sudo dnf install htop # CentOS/RHEL
# 起動
$ htop
# htop のメリット
# - カラー表示でCPU/メモリが視覚的にわかりやすい
# - マウス操作対応
# - F5でツリー表示
# - F9でシグナル送信(kill)
# - F6でソート項目選択
プロセスの詳細調査:/proc ファイルシステム
Linuxでは /proc/[PID]/ ディレクトリにプロセスの詳細情報が仮想ファイルとして公開されています。
# プロセスが開いているファイルを確認
$ ls -la /proc/1234/fd
# プロセスのメモリマップ
$ cat /proc/1234/maps
# プロセスが使用しているファイル(lsof を使う方法)
$ sudo lsof -p 1234
# プロセスが使用しているポート
$ sudo lsof -i -p 1234
# プロセスの環境変数
$ cat /proc/1234/environ | tr ' ' '
'
まとめ
- プロセスはPID・PPID・UID・メモリ空間などをカーネルが管理する実行単位
- STAT列の
D(割り込み不可スリープ)が多い場合はI/Oボトルネックの兆候 ps aux --sort=-%cpuでCPU使用率順にソートして原因を特定topのload averageはCPUコア数と比較して判断。waが高ければディスク問題nice/reniceでバックグラウンドジョブのCPU優先度を下げて他の処理に影響させない/proc/[PID]/でプロセスの詳細情報を低レベルで調査できる
📋 Linux入門チートシート完全版で基本コマンドを復習できます。
📋 Linuxサーバー運用・管理チェックリスト完全版でPhase 2の全要点を確認できます。



コメント