Top、Netstat、Du、およびその他のツールを使用してサーバーリソースを監視する方法
序章
すべてのコンピュータシステムは、適切な管理と監視の恩恵を受けています。 システムがどのように実行されているかを監視することは、問題を発見して迅速に解決するのに役立ちます。
この目的のために作成されたコマンドラインユーティリティはたくさんあります。 このガイドでは、ツールボックスに含めるのに最も役立つアプリケーションのいくつかを紹介します。
前提条件
このガイドに従うには、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
信号が送信され、可能な場合は正常に停止するようにプロセスに指示されます。
top
の改良版は、htop
と呼ばれ、ほとんどのパッケージリポジトリで利用できます。 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: [email protected]/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プロセス管理について学習することをお勧めします。