Top、Netstat、Du、およびその他のツールを使用してサーバーリソースを監視する方法

提供:Dev Guides
移動先:案内検索

序章

すべてのコンピュータシステムは、適切な管理と監視の恩恵を受けています。 システムがどのように実行されているかを監視することは、問題を発見して迅速に解決するのに役立ちます。

この目的のために作成されたコマンドラインユーティリティはたくさんあります。 このガイドでは、ツールボックスに含めるのに最も役立つアプリケーションのいくつかを紹介します。

前提条件

このガイドに従うには、Linuxベースのオペレーティングシステムを実行しているコンピューターにアクセスする必要があります。 これは、SSHで接続した仮想プライベートサーバーまたはローカルマシンのいずれかです。 このチュートリアルは、Ubuntu 20.04を実行しているLinuxサーバーを使用して検証されていますが、示されている例は、任意のバージョンのLinuxディストリビューションを実行しているコンピューターで機能するはずです。

このガイドに従うためにリモートサーバーを使用する場合は、最初に初期サーバーセットアップガイドを完了することをお勧めします。 そうすることで、sudo権限を持つroot 以外のユーザーや、UFWで構成されたファイアウォールなどの安全なサーバー環境がセットアップされます。これを使用してLinuxスキルを構築できます。

または、このページに埋め込まれているインタラクティブ端末を使用して、このチュートリアルのサンプルコマンドを試すこともできます。 次のインタラクティブターミナルの起動!ボタンをクリックしてターミナルウィンドウを開き、Linux(Ubuntu)環境での作業を開始します。

インタラクティブターミナルを起動します!

ステップ1-Linuxで実行中のプロセスを表示する方法

topコマンドを使用すると、サーバーで実行されているすべてのプロセスを確認できます。

top
Outputtop - 15:14:40 up 46 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  56 total,   1 running,  55 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1019600k total,   316576k used,   703024k free,     7652k buffers
Swap:        0k total,        0k used,        0k free,   258976k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
    1 root      20   0 24188 2120 1300 S  0.0  0.2   0:00.56 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/0        
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.03 watchdog/0         
    8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset             
    9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper            
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs          

出力の最初の数行は、CPU/メモリの負荷や実行中のタスクの総数などのシステム統計を提供します。

実行中のプロセスが1つあり、CPUサイクルをアクティブに使用していないためにスリープと見なされる55のプロセスがあることがわかります。

表示される出力の残りの部分には、実行中のプロセスとその使用統計が表示されます。 デフォルトでは、topはこれらをCPU使用率で自動的にソートするため、最もビジーなプロセスを最初に確認できます。 topは、Ctrl+Cの標準キーの組み合わせを使用してシェルを停止し、実行中のプロセスを終了するまで、シェルで実行を継続します。 これにより、kill信号が送信され、可能な場合は正常に停止するようにプロセスに指示されます。

[X43X] と呼ばれるtopの改良版は、ほとんどのパッケージリポジトリで利用できます。 Ubuntu 20.04では、aptを使用してインストールできます。

sudo apt install htop

その後、htopコマンドが使用可能になります。

htop
Output  Mem[|||||||||||           49/995MB]     Load average: 0.00 0.03 0.05
  CPU[                          0.0%]     Tasks: 21, 3 thr; 1 running
  Swp[                         0/0MB]     Uptime: 00:58:11

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 1259 root       20   0 25660  1880  1368 R  0.0  0.2  0:00.06 htop
    1 root       20   0 24188  2120  1300 S  0.0  0.2  0:00.56 /sbin/init
  311 root       20   0 17224   636   440 S  0.0  0.1  0:00.07 upstart-udev-brid
  314 root       20   0 21592  1280   760 S  0.0  0.1  0:00.06 /sbin/udevd --dae
  389 messagebu  20   0 23808   688   444 S  0.0  0.1  0:00.01 dbus-daemon --sys
  407 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.02 rsyslogd -c5
  408 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5
  409 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5
  406 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.04 rsyslogd -c5
  553 root       20   0 15180   400   204 S  0.0  0.0  0:00.01 upstart-socket-br

htopは、複数のCPUスレッドの視覚化、最新の端末での色のサポートの認識、およびその他の機能の中でもより多くの並べ替えオプションを提供します。 topとは異なり、デフォルトで常にインストールされるとは限りませんが、ドロップインリプレースメントと見なすことができます。 topと同様に、Ctrl+Cを押すと、htopを終了できます。

htopをより効果的に使用するのに役立つキーボードショートカットを次に示します。

  • M :メモリ使用量でプロセスを並べ替える
  • P :プロセッサー使用量でプロセスをソート
  • :ヘルプにアクセス
  • k :現在の/タグ付けされたプロセスを強制終了します
  • F2 :htopを構成します。 ここで表示オプションを選択できます。
  • /::検索プロセス

ヘルプまたはセットアップからアクセスできる他の多くのオプションがあります。 これらは、htopの機能を探索するための最初のストップになるはずです。 次のステップでは、ネットワーク帯域幅を監視する方法を学習します。

ステップ2–ネットワーク帯域幅を監視する方法

ネットワーク接続が過剰に使用されているようで、どのアプリケーションが原因かわからない場合は、nethogsというプログラムが適しています。

Ubuntuでは、次のコマンドを使用してnethogsをインストールできます。

sudo apt install nethogs

その後、nethogsコマンドが使用可能になります。

nethogs
OutputNetHogs version 0.8.0

  PID USER     PROGRAM                      DEV        SENT      RECEIVED       
3379  root     /usr/sbin/sshd               eth0       0.485       0.182 KB/sec
820   root     sshd: root@pts/0             eth0       0.427       0.052 KB/sec
?     root     unknown TCP                             0.000       0.000 KB/sec

  TOTAL                                                0.912       0.233 KB/sec

nethogsは、各アプリケーションをそのネットワークトラフィックに関連付けます。

nethogsを制御するために使用できるコマンドはごくわずかです。

  • M :「kb / s」、「kb」、「b」、「mb」の間で表示を変更します。
  • R :受信したトラフィックで並べ替えます。
  • S :送信されたトラフィックで並べ替えます。
  • Q :終了

iptraf-ngは、ネットワークトラフィックを監視するもう1つの方法です。 さまざまなインタラクティブな監視インターフェイスを提供します。

:IPTrafには、少なくとも80列×24行の画面サイズが必要です。つまり、このチュートリアルに組み込まれているインタラクティブ端末では機能しません。


Ubuntuでは、次のコマンドでiptraf-ngをインストールできます。

sudo apt install iptraf-ng

iptraf-ngはroot権限で実行する必要があるため、その前にsudoを付ける必要があります。

sudo iptraf-ng

ncursesと呼ばれる一般的なコマンドラインインターフェイスフレームワークを使用するメニューが表示されます。

このメニューを使用して、アクセスするインターフェイスを選択できます。

たとえば、すべてのネットワークトラフィックの概要を取得するには、最初のメニューを選択してから[すべてのインターフェイス]を選択します。 次のような画面が表示されます。

ここでは、すべてのネットワークインターフェイスで通信しているIPアドレスを確認できます。

これらのIPアドレスをドメインに解決する場合は、トラフィック画面を終了し、Configureを選択してから、Reverse DNS lookupsを切り替えることで、DNS逆引き参照を有効にできます。

TCP/UDP service namesを有効にして、ポート番号の代わりに実行中のサービスの名前を表示することもできます。

これらのオプションの両方を有効にすると、表示は次のようになります。

netstatコマンドは、ネットワーク情報を収集するためのもう1つの用途の広いツールです。

netstatは、ほとんどの最新システムにデフォルトでインストールされますが、サーバーのデフォルトのパッケージリポジトリからダウンロードすることで自分でインストールできます。 Ubuntuを含むほとんどのLinuxシステムでは、netstatを含むパッケージはnet-toolsです。

sudo apt install net-tools

デフォルトでは、netstatコマンドは、それ自体で開いているソケットのリストを出力します。

netstat
OutputActive Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.241.187.204:ssh     ip223.hichina.com:50324 ESTABLISHED
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  5      [ ]         DGRAM                    6559     /dev/log
unix  3      [ ]         STREAM     CONNECTED     9386     
unix  3      [ ]         STREAM     CONNECTED     9385     
. . .

-aオプションを追加すると、リスニングおよび非リスニングのすべてのポートが一覧表示されます。

netstat -a
OutputActive Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     6195     @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     7762     /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     6503     /var/run/dbus/system_bus_socket
. . .

TCPまたはUDP接続のみを表示するようにフィルタリングする場合は、それぞれ-tまたは-uフラグを使用します。

netstat -at
OutputActive Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN

「-s」フラグを渡して統計を表示します。

netstat -s
OutputIp:
    13500 total packets received
    0 forwarded
    0 incoming packets discarded
    13500 incoming packets delivered
    3078 requests sent out
    16 dropped because of missing route
Icmp:
    41 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        echo requests: 1
        echo replies: 40
. . .

出力を継続的に更新する場合は、-cフラグを使用できます。 マニュアルページを確認することで学習できる、netstatで利用できる他の多くのオプションがあります。

次のステップでは、ディスク使用量を監視するためのいくつかの便利な方法を学習します。

ステップ3–ディスク使用量を監視する方法

接続されたドライブに残っているディスク容量の概要については、dfプログラムを使用できます。

オプションがない場合、その出力は次のようになります。

df
OutputFilesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda        31383196 1228936  28581396   5% /
udev              505152       4    505148   1% /dev
tmpfs             203920     204    203716   1% /run
none                5120       0      5120   0% /run/lock
none              509800       0    509800   0% /run/shm

これはディスク使用量をバイト単位で出力しますが、これは少し読みにくい場合があります。

この問題を修正するには、人間が読める形式で出力を指定できます。

df -h
OutputFilesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.2G   28G   5% /
udev            494M  4.0K  494M   1% /dev
tmpfs           200M  204K  199M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            498M     0  498M   0% /run/shm

すべてのファイルシステムで使用可能な合計ディスク容量を確認する場合は、--totalオプションを渡すことができます。 これにより、要約情報を含む行が下部に追加されます。

df -h --total
OutputFilesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.2G   28G   5% /
udev            494M  4.0K  494M   1% /dev
tmpfs           200M  204K  199M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            498M     0  498M   0% /run/shm
total            32G  1.2G   29G   4%

dfは、有用な概要を提供できます。 別のコマンドduは、ディレクトリごとの内訳を示します。

duは、現在のディレクトリとすべてのサブディレクトリの使用状況を分析します。 ほぼ空のホームディレクトリで実行されているduのデフォルトの出力は、次のようになります。

du
Output4    ./.cache
8    ./.ssh
28    .

ここでも、-hを渡すことで、人間が読める形式の出力を指定できます。

du -h
Output4.0K    ./.cache
8.0K    ./.ssh
28K    .

ファイルサイズとディレクトリを表示するには、次のように入力します。

du -a
Output0    ./.cache/motd.legal-displayed
4    ./.cache
4    ./.ssh/authorized_keys
8    ./.ssh
4    ./.profile
4    ./.bashrc
4    ./.bash_history
28    .

下部の合計については、-cオプションを追加できます。

du -c
Output4    ./.cache
8    ./.ssh
28    .
28    total

詳細ではなく合計のみに関心がある場合は、次を発行できます。

du -s
Output28    .

du用のncursesインターフェースもあり、適切にはncduと呼ばれ、次のものをインストールできます。

sudo apt install ncdu

これにより、ディスクの使用状況がグラフィカルに表示されます。

ncdu
Output--- /root ----------------------------------------------------------------------
    8.0KiB [##########] /.ssh                                                   
    4.0KiB [#####     ] /.cache
    4.0KiB [#####     ]  .bashrc
    4.0KiB [#####     ]  .profile
    4.0KiB [#####     ]  .bash_history

上下の矢印を使用し、任意のディレクトリエントリでEnterキーを押すと、ファイルシステムをステップスルーできます。

最後のセクションでは、メモリ使用量を監視する方法を学習します。

ステップ4–メモリ使用量を監視する方法

freeコマンドを使用して、システムの現在のメモリ使用量を確認できます。

オプションなしで使用すると、出力は次のようになります。

free
Output              total        used        free      shared  buff/cache   available
Mem:        1004896      390988      123484        3124      490424      313744
Swap:             0           0           0

より読みやすい形式で表示するには、-mオプションを渡して、出力をメガバイト単位で表示できます。

free -m
Output              total        used        free      shared  buff/cache   available
Mem:            981         382         120           3         478         306
Swap:             0           0           0

Mem行には、バッファリングとキャッシュに使用されるメモリが含まれており、他の目的で必要になるとすぐに解放されます。 Swapは、アクティブなメモリを節約するためにディスク上のswapfileに書き込まれたメモリです。

最後に、vmstatコマンドは、メモリ、スワップ、ディスクio、CPU情報など、システムに関するさまざまな情報を出力できます。

このコマンドを使用して、メモリ使用量の別のビューを取得できます。

vmstat
Outputprocs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0  99340 123712 248296    0    0     0     1    9    3  0  0 100  0

-Sフラグで単位を指定すると、メガバイト単位でこれを確認できます。

vmstat -S M
Outputprocs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0     96    120    242    0    0     0     1    9    3  0  0 100  0

メモリ使用量に関する一般的な統計を取得するには、次のように入力します。

vmstat -s -S M
Output          495 M total memory
          398 M used memory
          252 M active memory
          119 M inactive memory
           96 M free memory
          120 M buffer memory
          242 M swap cache
            0 M total swap
            0 M used swap
            0 M free swap
. . .

個々のシステムプロセスのキャッシュ使用量に関する情報を取得するには、次のように入力します。

vmstat -m -S M
OutputCache                       Num  Total   Size  Pages
ext4_groupinfo_4k           195    195    104     39
UDPLITEv6                     0      0    768     10
UDPv6                        10     10    768     10
tw_sock_TCPv6                 0      0    256     16
TCPv6                        11     11   1408     11
kcopyd_job                    0      0   2344     13
dm_uevent                     0      0   2464     13
bsg_cmd                       0      0    288     14
. . .

これにより、キャッシュに保存されている情報の種類に関する詳細がわかります。

結論

これらのツールを使用すると、コマンドラインからサーバーを監視できるようになります。 さまざまな目的で使用される他の多くの監視ユーティリティがありますが、これらは良い出発点です。

次に、 ps、kill、およびniceを使用したLinuxプロセス管理について学習することをお勧めします。