Linux の htop または top で表示される項目のすべてについて(2019)

2026/07/04 21:00

Linux の htop または top で表示される項目のすべてについて(2019)

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

主要なメッセージは、Ubuntu サーバー 16.04 上の

htop
システムメトリックを正確に解釈する方法について説明し、負荷平均が CPU パーセンテージではなく、1 分間、5 分間、15 分の期間における実行中および中断不能プロセスの指数減衰移動平均であることを明確にしています。シングルコアマシンでは負荷が 1.0 の場合、利用効率は 100% に相当しますが、マルチコアマシンでは負荷数は容量最大時にコア数と一致します。このメトリックは CPU ボンディングプロセスと I/O ウェイト中のプロセス(ディスクまたは NFS を待機している中断不能睡眠/D ステートに属するプロセスなど)をどちらも含み、
mpstat
などのツールで見られる瞬間的な CPU データとは区別されます。問題の診断については、システム管理者は
/proc/<pid>/
ディレクトリを通じてプロセスステート(R, S, D, Z, T)を確認でき、ここではコマンドラインや実行可能ファイルのパスなどの詳細を提供します。また、ユーザーアイデンティティは
/etc/passwd
および
/etc/group
を通じて解決されます。一般的な起動プロセスには
systemd-journald
,
lvmetad
,
sshd
が含まれます。これらの内部動作—including コピーオンライプット方式を通じて共有メモリエリブラリが仮想使用量を膨らませる方法や、SIGINT や SIGKILL などのシグナルの動作—を理解することで、管理者は CPU ボンディングと I/O ボンディングのボトルネックを区別し、正確なシステム管理を行うことができます。

本文

Ubuntu サーバー 16.04 x64における
htop
の完全解説

本記事では、Ubuntu サーバー 16.04 (x64) 環境下で表示される

htop
ツールの各項目の意味を詳しく解説します。システムの状態を正確に把握し、プロセス管理の理解を深めることを目的としています。

目次


アップタイム (Uptime)

システムが稼働している時間の総称です。コマンド

uptime
で確認できます。

$ uptime
 12:17:58 up 111 days, 31 min,  1 user,  load average: 0.00, 0.01, 0.05

仕組みの裏側

  • uptime
    コマンドは
    /proc/uptime
    ファイルを読み込んで値を計算します。
  • このファイルには以下の情報が含まれています:
    1. 稼働総時間(秒): システム起動からの経過時間。
    2. アイドル時間(秒): その間マシンが処理待ちだった時間。
  • マルチコア注意: アイドル時間が全体のアップタイムより大きい場合もあります(すべてのコアの合計アイドル時間のため)。

確認方法 (
strace
)

システムコールをトレースして、ファイル読み込み動作を確認できます。

$ strace uptime 2>&1 | grep open
...
open("/proc/uptime", O_RDONLY)          = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY)         = 4

負荷平均 (Load Average)

システムが「どのくらい忙しそうか」を表す指標です。

uptime
出力の最後に表示される 3 つの数値(例:
0.00, 0.01, 0.05
)は、直近 1 分、5 分、15 分における負荷平均です。

データ的来源

  • ファイル
    /proc/loadavg
    に格納されています。
  • カラムの意味:
    1. 1 分間負荷平均
    2. 5 分間負荷平均
    3. 15 分間負荷平均
    4. 現在実行・待機中のプロセス数 / 全プロセス数 (例:
      1/120
      )
    5. 最後に使用された PID

なぜ負荷平均なのか?(重要)

負荷数は 「中断不可状態のプロセス数」+「実行・待機中のプロセス数」 で計算されます。これは単純な CPU 使用率ではありません。

  • CPU コア数との関係:
    • 2 コアシステムで
      Load Average: 1.0
      は、平均して 1 コアが処理済み(50% 使用)であることを意味します。
    • Load Average: 2.0
      はすべてのコアが忙しく(100% 使用)、キュー待ちが発生している可能性があります。
  • 指数減衰移動平均: 厳密には起動以降の負荷を時間重み付けして計算しています。

CPU 使用率を推測するには?

Load Average だけでは不十分な場合があります。より正確な情報は

mpstat
htop
の CPU グラフ
で確認してください。

$ sudo apt install sysstat -y
$ mpstat 1

プロセス一覧の表示

タスク (Tasks) とスレッド

  • htop
    ではプロセス数を 「Tasks」(タスク)と呼びます(Linux カーネルも「タスク」と呼ぶため)。
  • スレッド表示: キー
    [Shift+H]
    で切り替え。例:
    Tasks: 23, 10 thr
    (プロセス 23、スレッド 10)。
  • カーネルスレッド表示: キー
    [Shift+K]
    で表示可能。

PID (Process ID)

  • プロセスを一意に識別する番号です。
  • バックグラウンド実行時 (
    &
    ) は PID を確認できます。
    $ sleep 1000 &
    [1] 12503
    
  • $!
    変数
    : 最後に起動したバックグラウンドプロセスの PID を取得。

/proc/<PID>/
の活用

プロセスの詳細情報は、疑似ファイルシステム

/proc/<PID>/
に集約されています。

$ ls /proc/12503
attr    cmdline    cwd     environ  exe   fd      map_files  ...
  • 起動コマンドの確認:
    $ cat /proc/12503/cmdline
    sleep1000
    # \0 で区切られているため、od や tr で可読化
    $ od -c /proc/12503/cmdline
    s l e e p \0 1 0 0 0
    

プロセスツリーと所有者

プロセスツリーの確認

親プロセスから子プロセスへの階層構造を確認できます。

  • htop
    : キー
    [F5]
    で階層表示を切り替え。
  • コマンドライン:
    ps f
    pstree -a
    を使用。
$ pstree -a
init
  ├─atd
  ├─cron
  └─sshd
      └─bash
          └─pstree -a

プロセス所有者 (User)

プロセスはユーザーによって所有されます。

/etc/passwd
/etc/group
ファイルで ID を名前とマッピングします。

$ grep Uid /proc/<PID>/status
Uid:    1000(ubuntu)    1000

$ id 1000
uid=1000(ubuntu) gid=1000(ubuntu) groups=...

パスワードについて:

  • パスワードは
    /etc/shadow
    に格納されています(暗号化されたハッシュ値)。
  • sudo
    権限が必要な場合、
    visudo
    を使用して
    /etc/sudoers
    を編集してください。

プロセス状態 (State) の詳細

htop
STAT
カラムに表示される文字は以下の意味を持ちます:

記号状態の説明解説
RRunning実行中または実行待ちキューにあり。CPU を消費している。
SSleeping (Int)中断可能スリープ。イベントの完了を待機中。(
CTRL+C
で切れる)
DUninterruptible Sleep中断不可能スリープ。IO(ディスク等)待ち。殺害不能 (
SIGKILL
)。
ZZombie (Defunct)終了した子のプロセスだが、親が状態を受け取っていない。メモリは消費しない。
TStoppedジョブ制御信号で停止された (
CTRL+Z
)。
tTracing Stopデバッガー (gdb) で追跡中の状態。
XDead死んでいる(見られるべきではない状態)。

状態変化への対応例

  • 中断可能 (S):
    kill -INT <PID>
    またはキーボードで
    [F9]
    シグナル選択で停止可能。
  • 中断不可能 (D): IO 待ちなどのため、強制的な強制終了 (
    SIGKILL
    ) は有効ではありません。
  • ゾンビ (Z): 親プロセスが子プロセスの状態を受け取る(
    wait
    )まで消えません。

プロセス実行時間と優先度

実行時間 (Time)

マルチコア CPU でも、CPU は瞬間的に片方しか処理できません。タイムスライスという時間共有機構により、複数のプロセスを高速に切り替えて並列に実行しているように見えます。

優先度 (Priority) と Niceness

スケジューラは以下の情報に基づいてタスクの順序を決めます。

  • Niceness (NI): ユーザーが設定できる値(-20 から 19)。「Nice なプロセス」ほど CPU リソースを譲ります。
    • renice
      コマンドで実行中のプロセスの Nice 値を変更可能。
  • Priority (PRI): カーネル空間での優先度。NICeness との関係は PR = 20 + NI

メモリ使用量 (VIRT / RES / SHR / MEM%)

メモリ使用量は以下の意味を持ちます:

項目説明
VIRT仮想メモリー使用量。コード、データ、マッピングされたファイル、スワップアウト分を含む。実装上の上限を指すことが多い。
RES物理メモリー使用量。現在実際に占有しているメモリ。最も重要な指標。
SHR他プロセスと共有されているメモリの量(ライブラリなど)。
MEM%RES / 全 RAM に占める割合。色付き表示で視認可能(緑:使用、青:バッファ、橙:キャッシュ)。

注意: コアディumps (メモリコピー) を作成した際などは VIRT と RES が乖離します。


起動時プロセスの削減案

Ubuntu サーバー起動時に自動的に始まる不要なプロセスを特定し、削除するための手順を示します。

Before: システム起動時の主要プロセス

  • /sbin/init
    (systemd)
  • systemd-journald
    (ログ管理)
  • lvmetad
    (LVM メタデータキャッシュ)
  • udevd
    (デバイス管理)
  • timesyncd
    (NTP 同期)
  • atd
    ,
    cron
    ,
    rsyslogd
    ,
    acpid
    など。

After: 極端な削減案 (Extreme Edition)

サーバー用途であれば、以下のサービスを削除または無効化することでリソースを軽量化できます。

sudo apt remove lvm2 at snapd mdadm open-iscsi accountsservice policykit-1 acpid -y --purge
sudo apt remove snapd dbus rsyslog -y --purge

# cron を停止・無効化
sudo systemctl stop cron && sudo systemctl disable cron

# getty (ログインプロンプト) を削減
sudo rm /etc/systemd/system/getty.target.wants/getty@tty1.service

注意:

snapd
,
dbus
などは特定の依存パッケージ(例:
systemd-timesyncd
)やアプリケーションに影響を与える可能性があります。削除前に必要か確認してください。


補遺・ソースコード確認

ソースコードの確認

コマンドの仕組みを理解するには、パッケージ情報とソースコードを見ます。

$ dpkg -S /usr/bin/uptime
procps: /usr/bin/uptime

# Ubuntu パッケージリポジトリからソースを確認
http://packages.ubuntu.com/source/xenial/procps

ファイル記述子とリダイレクトの復習

  • >
    : 標準出力 (
    stdout
    ) をリダイレクト。
  • 2>&1
    : 標準エラー (
    stderr
    , ID 2) を標準出力 (ID 1) と同じ場所へ書き出す。

PuTTY での色表示修正

htop
の色が正しく表示されない場合:

  1. タイトルバーで右クリック
    [Change settings...]
  2. Window
    ->
    Colours
  3. Both
    を選択して Apply

C 言語による簡易シェルの実装 (
fork
,
exec
,
wait
)

以下のコードは、基本コマンド処理とプロセス制御の仕組みを実験的に示します。

// shell.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>

int main() {
  char line[1024];
  while (1) {
    printf("> ");
    fgets(line, sizeof(line), stdin);
    if (strcmp(line, "exit") == 0) break;

    int pid = fork();
    if (pid == 0) {
      // 子プロセス:コマンド実行
      if (execlp("ls", "ls", "-l", NULL) == -1) {
        perror("execlp");
        exit(1);
      }
    } else if (pid > 0) {
      // 親プロセス:子プロセスの終了を待つ
      int status;
      waitpid(pid, &status, 0);
      printf("Child exited with %d\n", WEXITSTATUS(status));
    }
  }
  return 0;
}

TODO (今後の学習目標)

  • ps
    のサブステータス解析 (Ss+, R+ 等)
  • カーネルスレッドの詳細な管理方法
  • /dev/pts
    (擬似端末) の仕組み
  • メモリ領域の詳細 (CODE, DATA, STACK, SWAP)
  • タイムスライスの長さの確認方法
  • Linux スケジューラーアルゴリズムの深掘り
  • man
    ページの書き方
  • CPU/メモリのバーチャル化について

結び言及と T シャツ提案

もし本記事が役に立った場合は、

htop
のより詳しい動作(人間視点での負荷表示など)を含むスクリーンショットをご覧ください。

「何かを学ぶ最良の方法は、それを教えることに挑戦することだ。」

同じ日のほかのニュース

一覧に戻る →

2026/07/05 8:41

鼻スプレーで脳の老化を逆転させることに成功した科学者たち

## Japanese Translation: テックス大学医学部ナーシュ K.ヴァシスト医学部の画期的な研究、アショーク・シェッティ医師をリーダーとし、再生医療研究所の下でマドフ・リラヴァーティ・ナラーヤナ氏とマハエダール・コダーリ氏といったシニア研究者が含まれたこの研究は、単純な 2 回投与の鼻スプレーが神経炎症性を逆転させ、脳機能を回復させることを示している。同研究は「細胞外小胞ジャーナル」(15(2): e70232, 2026)に発表され、数週間で炎症低減を示し、効果は数ヶ月持続することが確認された。治療法では、血脳関門を手術なしで回避しながらマイクロ RNA を直接脳組織へ届ける細胞外小胞(EVs)を使用している。細胞レベルにおいて、この治療は神経細胞のミトコンドリアを「充電」し、酸化ストレスを軽減すると同時に、NLRP3 インフラマソームおよび cGAS-STING シグナル経路といった炎症経路を抑制した。行動学試験では、対照群と比較して親しみのある物体を認識する能力や新たな環境を検出する能力に顕著な改善が確認された。シェッティ医師は、その成果が性別間で一貫性があり類似しており、このアプローチを「普遍的」と表現した。国立老人研究所(NIA)による支援を受けながら、特許出願が提出され、これは侵襲的な処置や月単位の薬物療法に代わる最小限の投与 regimes に向けた画期的な進歩を示している。2020 年の約 51 万4000 件から 2060 年には約 100 万件へと倍増するとの予測を踏まえれば、新たな認知症患者数の増加が待つのであり、このタイミングでの進展は意義深いが、世界規模で増大しつつある認知障害の負担を軽減しながら、従来の介入に伴うリスクを最小限に抑えるための変革的な一歩を提供している。

2026/07/05 4:41

Fable を用いた Command & Conquer: Generals の macOS、iPhone、iPad 向けネイティブ移植

## Japanese Translation: Zero Hour は、Apple Silicon Mac、iPhone および iPad 向けに公式ネイティブアプリケーションとして利用可能となり、DirectX 8 エンジンを Metal に変換する堅牢な翻訳パイプラインを採用しており、エミュレーションを必要とせずに動作します。このポータブルは fbraz3 が作成した GeneralsX プロジェクトを基盤とし、タップ選択、ドラッグボックス選択、ピンチによる拡大縮小など、基本的なタッチ操作を統合しています。macOS へのインストールには、外部的アセット(約 2.7 GB のバンドル)を抽出するために Steam コピーの所有が必要ですが、iOS バージョンはこれらのアセットがアプリケーションバンドル内に含められており、独立した体験を実現しています。開発プロセスには、Ammaar Reshi の指揮のもとで Claude Code が大幅な工数を投入し、MoltenVK や GPL v3 ライセンス付きコードなどのオープンソースツールを活用して、レガシーの PC アーキテクチャと最新の ARM64 ハードウェアを接続しました。Xcode 設定や特定のビルドスクリプトなどインストール前提条件が関わりますが、ユーザーはモバイルデバイス上で高性能の実時間戦略ゲームプレイを楽しむことができます。ただし、iOS ユーザーは長時間セッション中の潜在的なメモリ制限や、稀なバックグラウンド化時クラッシュについて留意する必要があります。

2026/07/05 6:51

GPT-5.5 Codex の推論トークンクラスタリングが性能低下を引き起こしている可能性があります

## Japanese Translation: 分析の結果、Codex ファミリーにおいて GPT-5.5 に特有の重大な異常が判明した。2026 年 2 月と 6 月 27 日の間、865 セッションから抽出された 390,195 トークン記録を検査したところ、GPT-5.5 の応答は過剰に正確な 516 トークンで終了する傾向があり、さらに 1034 トークンおよび 1552 トークンを周辺にクラスタリングしていた。GPT-5.5 は全応答の 19.3% に過ぎないにもかかわらず、正確な 516 トークンでのイベントの 82% を引き起こしており、非 GPT-5.5 モデルで観察されたレートと比較して約 33.6 倍高い。他のバージョン(GPT-5.4、GPT-5.2、および一部の GPT-5.3 バリエーション)では、これらの固定境界でのクラスタリングは著しく小さい。このパターンは分析深度の大幅な低下と相関しており、平均的な推論トークン強度は 2 月には 268.1 から 5 月には 107 トークン未満まで減少し、P90 も 772 から 344 トークンへと低下した。この異常は、GPT-5.5 の実行が正確な 516 トークンで終了する場合に複雑なコーディングタスクに対して誤った回答を返す過去の問題と関連している。固定トークン数でのクラスタリングは自然な変動ではなく閾値境界に似ており、推論予算のカップ、アクティブルーティングによる截断、スケジューラーの制限、または GPT-5.5 に特有のその他の内部閾値がある可能性を示唆している。この行動はEarlier モデルとの比較で severe な能力低下を示しており、高リスクなプログラミングシナリオにおける GPT-5.5 ファミリーの有用性を制限する可能性がある。専門家からは、これが劣化したサービス階級なのか、特定の内部ロジックなのか、またはその他の原因なのかを明らかにするために即時の調査を要請し、モデルと値ごとにトークンカウントイベントを照会して正確な値の数を比較したり、異なる GPT バージョンで複雑なタスクを再現するたり、正確な 516 トークンの応答とより長い推論出力を分離して行う品質評価を実施するなど、検証手順が提案されている。

Linux の htop または top で表示される項目のすべてについて(2019) | そっか~ニュース