Linux で top コマンドを使用する際のヒント

Linux で top コマンドを使用する際のヒント

まず、top のいくつかのフィールドの意味を紹介します。

VIRT:仮想メモリ使用量

1. プロセスが使用するライブラリ、コード、データなどを含む、プロセスに必要な仮想メモリのサイズ
2. プロセスが 100m のメモリを要求したが、実際には 10m しか使用しなかった場合、実際の使用量ではなく 100m だけ増加します。

RES:常駐メモリ使用量

1. プロセスが現在使用しているメモリサイズ(スワップアウトを除く)
2. 他のプロセスの共有を含む
3. 100mのメモリを申請し、実際に10m使用した場合、メモリは10mしか増加しません。これはVIRTの逆です。
4. ライブラリが占有するメモリに関しては、ロードされたライブラリファイルが占有するメモリサイズのみをカウントします。

SHR: 共有メモリ

1. 自身のプロセスの共有メモリに加えて、他のプロセスの共有メモリも含まれる
2. プロセスはいくつかの共有ライブラリ関数のみを使用しますが、共有ライブラリ全体のサイズが含まれます。
3. プロセスが占有する物理メモリサイズを計算する式: RES – SHR
4. スワップアウト後、ドロップします

データ

1. データによって占有されているメモリ。 topが表示されていない場合は、fキーを押して表示してください。
2. プログラムが実際に必要とするデータ領域は、動作中に実際に使用される領域です。

top の実行中は、top の内部コマンドを使用してプロセスの表示方法を制御できます。内部コマンドは次のとおりです。

s – 画面の更新頻度を変更する
l – 上部情報の最初の部分の最初の行の表示をオンまたはオフにします
t – 最初の部分の2行目のタスク情報と3行目のCPU情報の表示をオンまたはオフにします。
m – 最初の部分の4行目のMem情報と5行目のSwap情報の表示をオンまたはオフにします。
N – PIDサイズの順にプロセスをリストします
P – プロセスリストをCPU使用率で並べ替える
M – プロセスリストをメモリ使用量で並べ替える
h – ヘルプを表示
n – プロセスリストに表示するプロセスの数を設定します
q – トップを終了
s – 画面更新周期を変更する

列名の意味

PIDプロセスID
b PPID 親プロセスID
c RUSER 実ユーザー名
d UID プロセス所有者のユーザーID
e USER プロセス所有者のユーザー名
f GROUP プロセス所有者のグループ名
g TTY プロセスを開始した端末の名前。ターミナルから開始されていないプロセスは ? として表示されます。
h PR優先度
素晴らしい価値です。負の値は優先度が高いことを示し、正の値は優先度が低いことを示します
j P 最後に使用されたCPU。マルチCPU環境でのみ意味を持ちます。
k %CPU 前回の更新以降に使用されたCPU時間の割合
l TIME プロセスが使用したCPU時間の合計(秒単位)
m TIME+ プロセスが使用したCPU時間の合計(1/100秒単位)
n %MEM プロセスが使用する物理メモリの割合
o VIRT プロセスによって使用される仮想メモリの合計量(KB 単位)。仮想=スワップ+リソース
p SWAP スワップアウトされるプロセスによって使用される仮想メモリのサイズ (KB 単位)。
q RES プロセスによって使用され、スワップアウトされていない物理メモリのサイズ(KB 単位)。 RES=コード+データ
r CODE 実行可能コードが占有する物理メモリサイズ(KB単位)
s DATA 実行コード以外の部分(データセグメント + スタック)が占める物理メモリサイズ(KB)
t SHR共有メモリサイズ、単位KB
u nFLT ページフォールト数
v nDRT 最後の書き込み以降に変更されたページ数。
w S プロセスステータス。 (D = 中断不可能なスリープ状態、R = 実行、S = スリープ、T = トレース/停止、Z = ゾンビ プロセス)
x COMMAND コマンド名/コマンドライン
y WCHAN プロセスがスリープ状態の場合、スリープ中のシステム関数の名前が表示されます。
z フラグ タスクフラグ、sched.h を参照

デフォルトでは、より重要な PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、および COMMAND 列のみが表示されます。表示される内容を変更するには、次のショートカットキーを使用できます。

f キーを使用して、表示されるコンテンツを選択できます。 f キーを押すと、列のリストが表示されます。az を押して対応する列を表示または非表示にし、最後に Enter キーを押して確定します。
列の表示順序を変更するには、o キーを押します。小文字の az を押すと対応する列が右に移動し、大文字の AZ を押すと対応する列が左に移動します。最後に、Enter キーを押して確認します。
大文字の F キーまたは O キーを押し、次に a ~ z キーを押して、プロセスを対応する列で並べ替えます。大文字の R キーを押すと、現在の並べ替えを逆にすることができます。

トップの使い方:

使用する形式:

トップ [-] [d] [p] [q] [c] [C] [S] [s] [n]

パラメータの説明:

d: 2 回の画面情報の更新間の時間間隔を指定します。もちろん、ユーザーは s 対話型コマンドを使用して変更することもできます。

p: 監視プロセスIDを指定して、特定のプロセスの状態のみを監視します。

q: このオプションを選択すると、遅延なくトップが更新されます。呼び出し元のプログラムにスーパーユーザー権限がある場合、top は可能な限り最高の優先度で実行されます。

S: 蓄積モードを指定します。

s: top コマンドをセーフモードで実行します。これにより、対話型コマンドの潜在的な危険性が排除されます。

i: top がアイドル状態またはゾンビ状態プロセスを表示しないようにします。

c: コマンド名だけでなく、コマンド ライン全体を表示します。

一般的なコマンドの説明:

Ctrl+L: 画面を消去して書き直す

K: プロセスを終了します。システムは、終了する必要があるプロセスの PID と、プロセスに送信する必要があるシグナルを入力するようにユーザーに要求します。通常、シグナル 15 を使用してプロセスを終了できます。正常に終了できない場合は、シグナル 9 を使用してプロセスを強制的に終了します。デフォルト値は信号 15 です。このコマンドはセーフモードでは無効になります。

i: アイドルプロセスとゾンビプロセスを無視します。これはスイッチコマンドです。

q: プログラムを終了する

r: プロセスの優先順位を変更します。システムは、変更するプロセス PID と設定するプロセス優先度の値を入力するようにユーザーに要求します。正の値を入力すると優先度は下がり、負の値を入力するとプロセスの優先度は上がります。デフォルト値は 10 です。

S: 累積モードに切り替えます。

s: 2 回の更新間の遅延時間を変更します。システムはユーザーに新しい時間を秒単位で入力するよう要求します。小数点がある場合はmsに変換します。値 0 を入力すると、システムは継続的に更新されます。デフォルト値は 5 秒です。なお、時間を短くしすぎると、連続更新が発生して表示状況が明確に確認できなくなる可能性があり、システム負荷も大幅に増加します。

f または F: 現在の表示に項目を追加または削除します。

o または O: 表示される項目の順序を変更します

l: 平均負荷と起動時間情報の表示を切り替えます。

m: メモリ情報を表示するように切り替えます。

t: プロセスと CPU のステータス情報を表示するように切り替えます。

c: コマンド名と完全なコマンド ラインを表示するように切り替えます。

M: 常駐メモリのサイズでソートします。

P: CPU 使用率で並べ替えます。

T: 時間/累積時間で並べ替えます。

W: 現在の設定を ~/.toprc ファイルに書き込みます。

トップコマンドの知識を向上させる

マシン上で何が実行されているか、どのプロセスがメモリを消費してシステムを非常に遅くしているのかを把握しようとすると、top コマンドが最適です。

top は、Windows のタスク マネージャーや MacOS のアクティビティ モニターと同様に動作する非常に便利なプログラムです。 *nix マシンで top を実行すると、システム上で実行されているプロセスをリアルタイムで表示できます。

$ top

実行する top のバージョンに応じて、次のような表示が出ます。

トップ - 08:31:32 1 日前、4:09、ユーザー 0 人、負荷平均: 0.20、0.12、0.10
タスク: 合計 3、実行中 1、スリープ中 2、停止中 0、ゾンビ 0
%CPU: 0.5 us、0.3 sy、0.0 ni、99.2 id、0.0 wa、0.0 hi、0.0 si、0.0 st
KiB メモリ: 合計 4042284、使用済み 2523744、空き 1518540、バッファ 263776
KiB スワップ: 合計 1048572、使用済み 0、空き 1048572。キャッシュされたメモリ 1804264

PID ユーザー PR NI 仮想リソース SHR S %CPU %MEM 時間+ コマンド
  1 ルート 20 0 21964 3632 3124 S 0.0 0.1 0:00.23 バッシュ
 193 ルート 20 0 123520 29636 8640 S 0.0 0.7 0:00.58 フラスコ
 195 ルート 20 0 23608 2724 2400 R 0.0 0.1 0:00.21 トップ

お使いのバージョンの top は、特に表示される列がこれとは異なる場合があります。

出力の読み方

出力を見れば何を実行しているかはわかりますが、結果を解釈しようとすると少し混乱することがあります。

最初の数行には一連の統計情報 (詳細) が含まれ、その後に結果の列を含む表 (列) が続きます。後者から始めましょう。

リスト

これらはシステム上で実行されているプロセスです。デフォルトのソートは CPU 使用率の降順です。これは、リストの先頭にあるプログラムがより多くの CPU リソースを使用しており、システムに重い負荷をかけていることを意味します。リソース使用量の点では、これらのプログラムは文字通り最も多くのリソースを消費する上位のプロセスです。トップという名前はとても賢いと思います。

右端の COMMAND 列には、プロセス名 (プロセスを開始したコマンド) が報告されます。この例では、プロセス名は bash (top を実行しているコマンド インタープリター)、flask (Python で記述された Web フレームワーク)、および top 自体です。

その他の列には、プロセスに関する有用な情報が提供されます。

  • PID: プロセスID。プロセスを見つけるために使用される一意の識別子。
  • USER: プロセスを実行するユーザー
  • PR: タスクの優先度
  • NI: 素晴らしい値、優先度をより良く表現
  • VIRT: 仮想メモリのサイズ(KiB(キビバイト)単位)
  • RES: KiB 単位の常駐メモリ サイズ (物理メモリと仮想メモリの一部)
  • SHR: 共有メモリのサイズ(KiB単位)(共有メモリと仮想メモリの一部)
  • S: プロセスの状態。通常、I はアイドル、R は実行中、S はスリープ、Z はゾンビ プロセス、T または t は停止 (あまり一般的ではない他のオプションもあります)
  • %CPU: 最後の画面更新以降の CPU 使用率
  • %MEM: 最後の画面更新以降の RES 常駐メモリ使用量
  • TIME+: プログラム開始からの合計CPU使用時間
  • コマンド: 前述のようにコマンドを開始

VIRT、RES、SHR 値が何を表しているかを正確に知ることは、日常の運用においては重要ではありません。 VIRT 値が最も高いプロセスが最も多くのメモリを使用するプロセスであることを知っておくことは重要です。 top を使用してコンピューターの動作が遅い理由を調べる場合、VIRT 値が最も高いプロセスが原因であることがわかります。共有メモリと物理メモリの正確な意味を知りたい場合は、トップマニュアルページの「Linux メモリ タイプ」セクションを参照してください。

はい、キロバイトではなくキビバイトと言いました。 1024 という値はキロバイトと呼ばれることが多いですが、実際はキビバイトです。ギリシャ語の「キロ (χίλιοι)」は「1000」を意味します (たとえば、1 キロメートルは 1000 メートル、1 キログラムは 1000 グラムです)。 Kibi は、キロとバイナリを組み合わせた造語で、1024 バイト (または 2^10) を意味します。しかし、この単語は発音が難しいため、1024 バイトを意味するときにキロバイトと言う人が多くいます。 top はここで適切な用語を使用しようとしているので、そのまま受け取ってください。

画面更新手順

リアルタイムの画面更新は、Linux プログラムが実行できる非常に優れた機能の 1 つです。つまり、プログラムは表示するコンテンツをリアルタイムで更新できるため、テキストを使用していても動的に表示されます。とてもかっこいいですね!私たちの場合、一部の統計情報 (%CPU と %MEM) は最後の画面更新の値に基づいているため、更新間隔は重要です。

永続的なアプリケーションで実行されているため、アプリケーションを停止して別のコマンドライン オプションで再度実行するのではなく、コマンドを入力してリアルタイムで構成を変更できます。

h を押すとヘルプ画面が呼び出され、デフォルトの遅延 (画面の更新間隔) も表示されます。この値はデフォルトで (およそ) 3 秒に設定されていますが、d (おおよそ遅延を意味する) または s (おそらく画面または秒を意味する) と入力して変更できます。

詳細

プロセス リストの上には役立つ情報が多数あります。いくつかの詳細は少し奇妙でわかりにくいようです。しかし、時間をかけて一つずつ確認してみると、いざというときに非常に役立つことがわかります。

最初の行にはシステムに関する一般的な情報が含まれています。

  • top: トップを走っています!こんにちは!トップ!
  • XX:YY:XX: 現在の時刻。画面が更新されるたびに更新されます。
  • up (X日、YY:ZZ): システムの稼働時間、またはシステムが起動されてから経過した時間
  • 負荷平均(3 つの数字が続く):過去 1 分間、5 分間、15 分間のシステム負荷。

2 行目 (タスク) には実行中のタスクに関する情報が表示され、その内容は一目瞭然です。プロセスの合計数と、実行中、スリープ中、停止中、ゾンビ プロセスの数が表示されます。これは実際には上記の S (ステータス) 列の合計です。

3 行目 (%Cpu(s)) には、タイプ別の CPU 使用率が表示されます。データは画面の更新間の値です。値は次のとおりです。

  • us: ユーザープロセス
  • sy: システムプロセス
  • ni: 素晴らしいユーザープロセス
  • id: CPU アイドル時間。値が高い場合、システムは比較的アイドル状態であることを示します。
  • wa: 待機時間、またはI/Oが完了するまでの待機時間
  • hi: ハードウェア割り込みで消費された時間
  • si: ソフトウェア割り込みで消費された時間
  • st: 「ハイパーバイザーによってこの VM から盗まれた時間」

t (トグル) をクリックすると、タスク行と %Cpu 行を展開したり折りたたんだりできます。

4 行目 (KiB Mem) と 5 行目 (KiB Swap) は、メモリとスワップ領域に関する情報を提供します。これらの値は次のとおりです。

  • 総メモリ容量
  • 使用メモリ
  • 空きメモリ
  • メモリバッファ値
  • スワップスペースキャッシュ値

デフォルトでは KiB で表示されますが、E (メモリ スケーリングの拡張) を押すと、KiB、MiB、GiB、TiB、PiB、EiB (キロバイト、メガバイト、ギガバイト、テラバイト、ペタバイト、エクサバイト) などのさまざまな単位に切り替えることができます。

オプションと設定項目の詳細については、上部のマニュアル ページを参照してください。 man top を実行すると、システム上のドキュメントを表示できます。 HTML マニュアル ページも多数ありますが、これらは top の異なるバージョンに固有のものである可能性があることに注意してください。

2つの主要な選択肢

システムの状態を確認するために常に top を使用する必要はありません。特に、よりグラフィカルでプロフェッショナルなインターフェースが必要な場合は、状況に応じてトラブルシューティングを支援する他のツールを使用できます。

hトップ

htop は top に似ていますが、非常に便利な機能を備えています。CPU とメモリの使用状況をグラフィカル インターフェイスで表示できます。

これは、先ほど top を実行したのと同じ環境で htop を実行すると次のようになります。表示はシンプルですが、機能は豊富です。

タスク統計、負荷、稼働時間、プロセス リストは引き続き表示されますが、見やすくカラフルで動的なコアごとの CPU 使用率と、グラフィカルなメモリ使用量チャートも表示されます。

それぞれの色の意味は次のとおりです (h を押すと、この情報に関するヘルプも表示されます)。

CPU タスクの優先度またはタイプ:

  • 青: 優先度が低い
  • 緑: 通常の優先度
  • 赤: カーネルタスク
  • 青: 仮想タスク
  • 棒グラフの末尾の値は、使用されている CPU の割合です。

メモリ:

  • 緑: 使用済みメモリ
  • 青: バッファリングされたメモリ
  • 黄色: キャッシュメモリ
  • 棒グラフの末尾の値は、使用済みメモリと合計メモリを示します。

色がうまく機能しない場合は、htop -C を実行して色を無効にすることができます。そうすると、htop は異なるシンボルを使用して CPU とメモリの種類を表示します。

下部には、フィルター結果を操作したり、並べ替え順序を変更したりするために使用できるアクティブなショートカット キーヒントのセットがあります。いくつかのショートカット キーを試して、その機能を確認してください。ただし、F9 を試すときは注意してください。プロセスを強制終了 (停止) するシグナルのリストが表示されます。これらのオプションを本番環境外で検討することをお勧めします。

htop の作者である Hisham Muhammad (そう、htop は Hisham にちなんで名付けられました) が、2 月に FOSDEM 2018 で短い講演を行いました。彼は、htop にはシンプルなグラフィカル インターフェイスがあるだけでなく、以前のツール (top など) では利用できなかったプロセス情報統計を表示するより現代的な方法も備わっていると説明しました。

htop の詳細については、マニュアル ページまたは htop Web サイトを参照してください。 (ヒント: ウェブサイトの背景は動的な htop です。)

docker 統計

Docker を使用している場合は、docker stats を実行して、コンテナのステータスに関するリッチでコンテキストに応じたインターフェースを生成できます。

これはプロセスではなくコンテナによって分類されるため、top よりも役立つ可能性があります。これは、コンテナの実行速度が遅い場合に特に役立ち、top を実行してコンテナの進行状況を確認するよりも、どのコンテナが最も多くのリソースを消費しているかを確認する方が速くなります。

上記の top および htop の用語の説明を参考にすれば、docker stats でのそれらの用語を理解しやすくなるはずです。ただし、docker stats のドキュメントには、各列の詳細な説明が記載されています。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux topコマンドの使い方の詳しい説明
  • Linux topコマンドとその出力結果の詳細な説明
  • Linux topコマンドの詳しい説明
  • Linuxのtopコマンドの詳しい説明
  • Linuxのtopコマンド出力の詳細な説明

<<:  Vueシャトルボックスは上下の動きを実現します

>>:  MySQL デッドロックのトラブルシューティング プロセスの完全な記録

推薦する

Docker ケース分析: Redis サービスの構築

目次1 マウントディレクトリとファイルを作成する2 Redisイメージを取得する3 コンテナを作成し...

MySQL グローバルロックとテーブルレベルロックの具体的な使用法

目次序文グローバルロックテーブルロックテーブルロックメタデータ ロック (MDL ロック)要約する参...

Vueは双方向データバインディングを実装します

この記事の例では、双方向データバインディングを実装するためのVueの具体的なコードを参考までに共有し...

Win10にnginxをインストールする方法

会社から、負荷を実装するためにnginxをベースにFordプロジェクトのWebServiceサーバー...

Linux コマンドで .sql ファイルをエクスポートおよびインポートする方法

この記事では、Linux コマンドを使用して .sql ファイルをエクスポートおよびインポートする方...

HTML ボディタグと HTML でよく使われる制御タグの詳細な説明

1. <body> タグ: Web ページの本体をマークするために使用されます。body...

Docker マルチステージビルドを使用してイメージサイズを縮小する方法

この記事では、Docker のマルチステージ ビルド機能を使用してイメージ サイズを大幅に削減する方...

MySQL 5.7.18 インストールチュートリアルと問題の概要

MySQL 5.7.18 のインストールと問題の概要。今日、新しい MySQL サーバーを導入しまし...

Vueの監視プロパティの詳細な説明

目次Vue モニターのプロパティリスナープロパティとは何ですか?リスニングプロパティと計算プロパティ...

MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明

1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、...

初心者向けWebサイト構築ガイド⑥:FlashFXPの詳しい使い方

今日は、サイトの設定やウェブサイトのアップロードなど、FlashFXP の最も基本的な機能を紹介しま...

Linux システムで IPv6 をサポートするように Nginx を設定する方法

1. 既存のnginxがipv6をサポートしているかどうかを確認する既存の nginx が ipv6...

nginx プロキシ ポート 80 からポート 443 への実装

nginx.conf設定ファイルは次のとおりです。 ユーザー nginx; ワーカープロセス 1; ...

初心者向け入門チュートリアル⑨:ポータルサイトの構築方法

さらに、ブログ プログラムで構築された記事 Web サイトは常にブログのように見え、カスタマイズでき...

Nginx プロキシを使用してフロントエンドのクロスドメイン問題を解決する方法

序文Nginx (「エンジン エックス」と発音) は、リバース プロキシ、ロード バランサ、HTTP...