最終更新日 2025年1月14日
スポンサーリンクhtopについて
概要
Linuxでシステム調査やパフォーマンス監視を行う際に、htopは非常に便利なコマンドです。
htopはターミナルベースのtopコマンドを改良したツールで、機能性と解析性を高めたGUI(グラフィカルユーザーインターフェースのことで視覚的に操作しやすい画面のことです)ベースのビューを提供します。
このツールを使うことで、システムのリソース使用状況をより視覚的に観測し、問題の分析や解決を行えます。
主な特徴
htopコマンドの主な特徴は以下です。
- カラーコード化されたCPU(中央演算処理装置)やメモリ利用率表示できる
負荷が高い部分が一目で分かります。 - プロセス(実行中のプログラム)ごとの情報を視覚化
リソースを多く消費しているプロセスを簡単に特定可能。 - マウス操作に対応したインタラクティブなUI(ユーザーインターフェース)
初心者にも扱いやすいです。 - フィルタリング(特定条件で絞り込み)機能
特定のプロセスを素早く検索できます。 - マルチスレッドプロセスの詳細表示
スレッドごとの情報も確認可能。 - I/Oリソース監視
ディスク読み書きの負荷を確認可能。
htopのオプション
htopコマンドで利用可能なオプションは以下です。
オプション | 説明 |
---|---|
-d | ディレクトリ(フォルダ)を指定 |
-u | ユーザーを指定(例:htop -u root) |
-p | プロセスIDを指定(例:htop -p 1234) |
-C | CPU利用率をカラーで表示 |
--tree | プロセスをツリー構造(親子関係が分かる形式)で表示 |
--sort-key | ソート基準を指定して表示(例:htop --sort-key=CPU) |
出力結果のステータスの見方
出力結果におけるステータスの見方は以下の通りです。
項目名 | 説明 |
---|---|
PID | プロセスID:システムがプロセス(プログラム)を識別するための一意の番号。 |
USER | ユーザー名:そのプロセスを実行しているユーザー(例: root や appuser)。 |
PRI | 優先度(Priority):プロセスの優先順位。数値が低いほど高い優先度で処理される。 |
NI | Nice値:プロセスの優先度を調整する値。小さいほど優先度が高くなる(管理者権限で変更可能)。 |
VIRT | 仮想メモリ(Virtual Memory):プロセスが使用する仮想アドレス空間の合計サイズ。 |
RES | 実メモリ(Resident Memory):プロセスが実際に使用している物理メモリの量。 |
SHR | 共有メモリ(Shared Memory):プロセス間で共有されているメモリの量。 |
S | ステータス(Status):プロセスの状態を示す。主な値は以下の通り: |
- R:実行中(Running) | |
- S:待機中(Sleeping) | |
- Z:ゾンビプロセス(Zombie) | |
- D:割り込み不可状態(Disk sleep) | |
%CPU | CPU使用率:プロセスが現在使用しているCPUリソースの割合。 |
%MEM | メモリ使用率:プロセスがシステム全体の物理メモリのうちどれだけ使用しているかの割合。 |
TIME+ | 実行時間:プロセスが開始されてから使用されたCPU時間の累積値(フォーマットは HH:MM:SS)。 |
COMMAND | コマンド:プロセスを開始したコマンドや実行中のプログラムの名前(例: nginx, python)。 |
実際の出力結果の見方
下記の出力結果が表している内容を説明します。
PID USER PRI NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 1024M 256M 12M R 45.0 1.2 1:10.24 nginx
5678 appuser 19 0 2048M 512M 16M S 5.0 2.3 0:25.12 python
nginx プロセス(PID 1234)
- システムの45%のCPUを使用中で、高負荷状態。
- 実メモリ(RES)は256MB、物理メモリ全体の1.2%を使用。
- 実行時間は1分10秒。
python プロセス(PID 5678)
- CPU使用率は5%と低い。
- メモリ使用率は2.3%、RESは512MBで、比較的多くのメモリを消費。
ポイント
ステータス確認の際のポイントは以下です。
- 高い%CPUや%MEMの値に注目してリソースを大量消費しているプロセスを特定。
- ステータス(S列)が「Z」や「D」のプロセスは異常が疑われるため、調査が必要。
- TIME+ が増加し続けているかを監視することで、長時間動作しているプロセスの挙動を把握。
その他知っておいた方が良いこと
初期設定
初めてhtopを実行すると、デフォルト設定が適用されます。
しかし、好みに合わせて設定を変更することで、より効率的に活用できます。
設定画面はF2
キーを押すことで開きます。
設定ファイルの編集
htopは設定内容を~/.config/htop/htoprcに保存します。このファイルを直接編集することで、より詳細なカスタマイズが可能です。
# カスタマイズ例
fields=0 48 17 18 38 39 2 46 47 49 1
sort_key=46
htopが見つからない場合
htopはデフォルトでインストールされていない場合があります。その際は以下のコマンドでインストールしてください。
sudo apt-get install htop # Ubuntu/Debian系
sudo yum install htop # CentOS/RHEL系
パーミッションエラーが発生する場合
特定のプロセス情報を表示するには管理者権限が必要な場合があります。
以下のようにsudoを付けて実行してください。
sudo htop
システムが重い場合
htop自体が負荷をかける場合は、更新間隔を長く設定することで軽減できます。
利用するコマンド
htop -d 100
スポンサーリンク
業務でよく使うコマンドの例
この章では業務でよく利用するオプションについて記載します。
実際に現場で利用したオプションや使い方について事例ベースで紹介していきます。
❶CPU利用率をカラー化
CPUごとの利用率が色分けして表示することが可能です。
これにより、どのCPUがどの程度使用されているかが一目で分かります。
利用するコマンド
htop -C
上記のコマンドを利用すると以下のような出力になります。
PID USER PRI NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 1234M 56M 12M R 15.0 0.3 0:10.24 sample_process
5678 user1 20 0 512M 24M 8M S 5.0 0.1 0:02.12 another_process
❷プロセスの詳細監視
特定のプロセスに関連する詳細な統計情報が確認できます。
利用するコマンド
htop -p 1234
スポンサーリンク
❸フィルタリング機能
フィルタリング機能を使用して特定のプロセスを素早く探すことが可能です。
利用するコマンド
htop
上記のコマンドを実施した後に、F4
キーを押し、フィルタリングしたいプロセス名を入力(例:nginx
)します。
❹プロセスを実行したユーザの指定
特定のユーザーが実行しているプロセスのみを表示することができ、リソース消費が大きいユーザーの特定に役立ちます。
利用するコマンド
htop -u username
上記のコマンドを利用すると以下のように特定のユーザに絞った出力になります。
PID USER PRI NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2345 username 20 0 1024M 48M 16M S 8.0 0.2 0:05.78 user_process
❺ツリー構造でプロセス表示
プロセスの親子関係(どのプロセスがどのプロセスを起動したか)がツリー形式で表示され、依存関係が分かりやすくなります。
利用するコマンド
htop --tree
上記のコマンドを利用するとツリー形式で表示されます。
PID USER PRI NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1000 root 20 0 512M 24M 8M S 0.0 0.1 0:00.12 parent_process
101 root 20 0 256M 12M 4M S 0.0 0.0 0:00.04 |__ child_process
スポンサーリンク
htopを使った実例
実例❶サーバー負荷軽減
大量のトラフィックが発生したウェブサーバーでの負荷軽減のため、htopでCPU使用率が高いプロセスを特定し、高負荷プロセスをF9
で終了するという使い方をしました。
実際の対応手順
1.負荷の原因を調査する準備
まず、サーバーにアクセスできるようにします。サーバーがリモートにあったのでSSHを使って接続しました。
ssh username@server_ip_address
※username はログインユーザー名、server_ip_address はサーバーのIPアドレスです。
2. htopを起動する
サーバーにログインした後、次のコマンドを実行して htop を起動します。
htop
画面が開いたら、色分けされたCPU利用率やメモリ使用量がリアルタイムで表示されます。
3. CPU使用率が高いプロセスを見つける
画面上部にCPUやメモリの利用状況が表示されていることを確認し、下記の手順を実施しました。
1.キーボードの矢印キー(↑↓)を使ってプロセスリストをスクロール。
2.%CPU 列に注目し、数値が大きいプロセスを探す。
PID USER PRI NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 1234M 56M 12M R 95.0 0.3 1:10.24 process_name
上記のプロセスがCPUを95%使用しており、このプロセスが問題の原因となっていると考えました。
4. 高負荷のプロセスを終了する
問題のプロセスを終了するため、以下の手順を実行しました。
1.矢印キーを使って、終了したいプロセス(例: process_name
)を選択
2.F9
キーを押します。これで「Kill Process(プロセスを終了)」メニューが開く
3.シグナル(終了の指令)を選択。※通常はデフォルト(SIGTERM
)を選択します。
4.Enterキーを押してプロセスを終了
実例❷メモリリークの検出
プログラムがメモリを解放せずに使い続けてしまう「メモリリーク」が発生すると、サーバーの動作が遅くなり、最悪の場合システムが停止することがあります。この問題を htop を使用し、下記の手順で特定し、プロセス対応しました。
1.プロセスのメモリ使用量が急激に増加しているのをhtopで監視。
2.メモリリークが疑われるプロセスを特定し、修正。
実際の対応手順
1.負荷の原因を調査する準備
まず、サーバーにアクセスできるようにします。サーバーがリモートにあったのでSSHを使って接続しました。
ssh username@server_ip_address
※username はログインユーザー名、server_ip_address はサーバーのIPアドレスです。
2. htopを起動する
サーバーにログインした後、次のコマンドを実行して htop を起動します。
htop
画面が開くと、プロセスごとのメモリ使用量がリアルタイムで表示されます。
3. メモリ使用量が多いプロセスを確認
%MEM 列を確認します。これは、プロセスが全体のメモリのうちどの程度を使用しているかを示します。
矢印キー(↑↓)を使ってリストをスクロールし、異常に高い値を示すプロセスを探しました。
1.キーボードの矢印キー(↑↓)を使ってプロセスリストをスクロール。
2.%CPU 列に注目し、数値が大きいプロセスを探す。
PID USER PRI NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4321 appuser 20 0 2048M 1024M 12M S 5.0 45.0 2:45.12 suspected_app
上記のプロセスが45%のメモリを使用しており、メモリリークの原因であると考え、以降このプロセスに対して対策を実施していきました。
4. メモリ使用量の変化を監視
一定時間監視を続け、メモリ使用量が時間とともに増加し続けているかを確認しました。
確認方法としては、htop上で問題のプロセスを選択(矢印キーを使用)し、メモリ使用率が画面更新(デフォルトでは1秒ごと)が徐々に増加していると確認しました。
5.問題のプロセスを一時的に停止(必要に応じて)
影響を最小限にするために、問題のプロセスを選択し、F7キーで優先度を下げました。
その後、問題のプロセスが重要なサービスに関連していないか確認しました。
6.再起動
最後にメモリリークの原因となっているプログラムを再起動し、再び htop を使ってメモリ使用量が正常値に戻っているか確認しました。
systemctl restart service_name
※service_name は該当するサービス名(例: nginxやApache)。
ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。