はじめに
サーバーや開発環境で「なんか重いな」「何が動いているんだろう?」と思ったことはありませんか?そんな時、ターミナル上でプロセスの状態をリアルタイムで把握できるツールが非常に役立ちます。今回は、Linux/macOSのターミナルでよく使われるプロセス管理ツール、`top`、`htop`、`btop` をご紹介します。これらのツールを使えば、CPUやメモリを大量に消費しているプロセスを特定し、必要に応じて終了させることで、システムのパフォーマンスを改善したり、問題の原因を突き止めたりすることができます。特に、開発サーバーの暴走や、ビルドが遅い原因の調査、予期せず発生したゾンビプロセス(応答しなくなったプロセス)の強制終了といったトラブルシューティングで大活躍します。
基礎知識:プロセスとは?
まず、「プロセス」とは何かを理解しましょう。プロセスとは、簡単に言うと「現在実行中のプログラム」のことです。例えば、Webブラウザを開いたり、コードをビルドしたり、音楽を再生したり、これらすべてがそれぞれ一つのプロセスとしてOS上で動いています。
OSは、これらのたくさんのプロセスがCPUやメモリといった限られたリソースを奪い合わないように、うまく管理しています。しかし、時には特定のプロセスがリソースを使いすぎたり、予期せぬエラーで停止してしまったりすることがあります。
ここで登場するのが、今回ご紹介するプロセス管理ツールです。これらのツールは、OS上で動いているすべてのプロセスのリストを表示し、それぞれがどれくらいCPUやメモリを使っているか、どのような状態かといった情報をリアルタイムで教えてくれます。
プロセス管理ツールの紹介
1. `top` コマンド
`top` は、多くのLinuxディストリビューションに標準で搭載されている最も基本的なプロセス管理ツールです。
top
このコマンドを実行すると、以下のような情報が表示されます。
- 上部: システム全体のCPU使用率、メモリ使用量、スワップ使用量、タスク(プロセス)の数などが表示されます。
- 下部: 各プロセスのリストが表示され、PID(プロセスID)、ユーザー、CPU使用率、メモリ使用率、コマンド名などが確認できます。
`top` はリアルタイムで情報が更新されますが、表示が見づらいと感じることもあります。また、マウス操作はできません。
2. `htop` コマンド
`htop` は `top` の後継とも言える、より高機能で使いやすいツールです。色鮮やかな表示や、マウス操作(対応しているターミナルエミュレータの場合)、キーボードショートカットによるプロセスのソートや終了(Kill)などが可能です。
`htop` は標準でインストールされていない場合が多いので、以下のコマンドでインストールできます。
- Debian/Ubuntu系:
sudo apt update
sudo apt install htop
- CentOS/RHEL系:
sudo yum install epel-release
sudo yum install htop
- macOS (Homebrew):
brew install htop
インストール後、ターミナルで以下のように実行します。
htop
`htop` の表示は、`top` よりも視覚的に分かりやすく、直感的に操作できます。
3. `btop` コマンド
`btop` は、さらに新しく、よりモダンなインターフェースを持つプロセス管理ツールです。CPU、メモリ、ディスクI/O、ネットワークトラフィックなどをグラフで表示してくれるのが特徴です。
`btop` も標準ではインストールされていないので、以下のコマンドでインストールできます。
- Debian/Ubuntu系:
sudo apt update
sudo apt install btop
- CentOS/RHEL系:
sudo dnf install btop
- macOS (Homebrew):
brew install btop
インストール後、ターミナルで以下のように実行します。
btop
`btop` の表示は非常にリッチで、システムの状態を一目で把握するのに役立ちます。
実装・トラブルシューティング例
システムが重いと感じたとき、これらのツールを使って原因を特定する典型的な流れを見てみましょう。
1. ツールの起動: まずは `htop` や `btop` を起動します。
htop
2. リソース消費の確認:
- CPU使用率が高いプロセスを探します。`htop` や `btop` では、CPU列をクリック(またはキー操作)してソートできます。
- メモリ使用量が多いプロセスを探します。同様に、MEM列でソートします。
3. 原因の特定:
- もし、普段起動していないはずのプロセスや、明らかにリソースを使いすぎているプロセスがあれば、それが原因である可能性が高いです。例えば、開発中のWebサーバーが暴走してCPUを100%使い続けている、といった状況が考えられます。
4. プロセスの終了(Kill):
- 特定したプロセスのPID(プロセスID)を確認します。
- `htop` や `btop` の場合、カーソルを合わせてF9キー(またはマウスでクリック)で Kill シグナルを送信できます。
- 通常は `SIGTERM` (15) が送信され、プロセスは安全に終了しようとします。
- それでも終了しない場合は、より強制的な `SIGKILL` (9) を送信します。PIDを指定して `kill` コマンドで直接実行することもできます。
# SIGTERMで終了を試みる
kill [PID]
# SIGKILLで強制終了する
kill -9 [PID]
サンプルプログラム(htopの基本操作)
ここでは、`htop` を使った基本的な操作を、コードコメント付きでご紹介します。
!/bin/bash
htopコマンドを実行し、プロセス情報をリアルタイムで表示します。
このコマンドは対話的に操作するため、プログラムというよりはシェルコマンドですが、
実行方法と主な操作を解説します。
echo “htop を起動します。終了するには ‘q’ キーを押してください。”
echo “————————————————–”
htopコマンドを実行
実行後、以下の操作が可能です:
– 上下矢印キー: プロセスリストを移動
– F1 (Help): ヘルプを表示
– F2 (Setup): 表示設定を変更 (表示項目、カラースキームなど)
– F3 (Search): プロセスを検索
– F4 (Filter): プロセスをフィルタリング
– F5 (Tree): プロセスをツリー表示に切り替え
– F6 (SortBy): ソート順を変更
– F7 (Nice -): プロセスの優先度を下げる (CPU負荷を減らす)
– F8 (Nice +): プロセスの優先度を上げる (CPU負荷を増やす)
– F9 (Kill): プロセスを終了 (SIGTERM を送信)
– F10 (Quit): htop を終了
注意: マウス操作が可能なターミナルでは、列ヘッダーをクリックしてソートしたり、
プロセスを選択して右クリックメニューから Kill を選択することもできます。
htop
echo “————————————————–”
echo “htop を終了しました。”
ゾンビプロセス(
1. htop で PID を確認する。
2. q で htop を終了する。
3. kill コマンドで終了させる。
例: PIDが 1234 のゾンビプロセスを強制終了する場合
kill -9 1234
(通常は kill [PID] で SIGTERM を送るのが先ですが、ゾンビプロセスは親プロセスが
終了しないと除去できない場合が多いです。それでも試す価値はあります。)
応用・注意点
- SIGTERM vs SIGKILL: プロセスを終了させる際は、まず `SIGTERM` (シグナル番号15) を送るのが一般的です。これはプロセスに「終了します」と通知し、データ保存などのクリーンアップ処理を行ってから終了させるためのシグナルです。一方、`SIGKILL` (シグナル番号9) は、プロセスに通知することなく、OSが強制的にプロセスを終了させます。データが失われる可能性があるため、`SIGTERM` で終了しない場合の最終手段として使用しましょう。
- ゾンビプロセス: プロセスが終了したにも関わらず、そのプロセスが残骸として残り、PIDが解放されない状態を「ゾンビプロセス」と呼びます。これは通常、親プロセスが終了した子プロセスの終了ステータスを回収しなかった場合に発生します。`top` や `htop`、`btop` では、ステータスが `Z` (zombie) と表示されることがあります。ゾンビプロセス自体はリソースを消費しませんが、PIDを消費するため、大量に発生すると問題になることがあります。基本的には、そのゾンビプロセスを生成した親プロセスを終了させることで解消されます。
- リソース監視の重要性: `htop` や `btop` は、開発中だけでなく、本番環境でも定期的にチェックすることで、予期せぬパフォーマンス低下やリソース枯渇を防ぐのに役立ちます。特に、新しい機能をデプロイした後などは、リソース消費が増えていないか注意深く監視しましょう。
- `ps` コマンドとの連携: より詳細な情報を取得したり、特定の条件でプロセスを検索したりしたい場合は、`ps` コマンドと組み合わせることも有効です。例えば、「CPU使用率が高い順にプロセスを表示する」といった場合、`ps aux –sort=-%cpu` のようなコマンドが使えます。
これらのツールを使いこなすことで、ターミナルでの作業効率が格段に向上し、システムの問題解決能力も高まります。ぜひ日々の業務で活用してみてください。

コメント