システムパフォーマンスを測定するための項目には、CPU、Memory、Disk、Trafficなどがあります。Linux環境でこれらのリソースを確認するためのさまざまなコマンドをサポートしています。
それぞれのコマンドでシステムをモニタリングする方法について学びましょう。
uname: システムとカーネルの情報 Uname コマンドを使用すると、システムとカーネルの情報を確認できます。-a オプションを使用すると、すべての情報を確認できます。
それぞれの意味は次のとおりです。
[Linux] : カーネル名[Localhost] : ホスト名[3.13.0-24-generic] : カーネルリリース情報[#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014] : カーネルバージョン[x86_64] : マシンハードウェア名[x86_64] : プロセッサの種類[x86_64] : ハードウェアプラットフォーム[GNU/Linux] : オペレーティングシステム利用可能なオプションは次のとおりです。
$ uname --help
[-a, --all] : フルコンテンツ出力[-s, --kernel-name] : カーネル名出力[-n, --nodename] : ネットワークノードのホスト名出力[-r, --kernel-release] : カーネルリリース情報出力[-v, -kernel-version] : カーネルバージョン出力[-m, --machine] : マシンハードウェア名の出力[-p, --processor] : プロセッサの種類または「unknown」出力[-i,- -hardware-platform ] : ハードウェアプラットフォームまたは「unknown」出力[-o, --operating-system ] : オペレーティングシステム「unknown」出力
ifconfig: ネットワーク基本モニタリング システムに設定されているネットワークインタフェースの状態を確認および変更できます。
それでは、ifconfigコマンドを使用したときの意味を見てみましょう。
[eth0, eth1] : よくLANカードと呼ばれる有線ネットワークインタフェースです。上記の例は、2つのLANカードがある場合です。[lo] : ループバックインターフェイスで自分自身と通信するために使用する仮想デバイスです。IPは127.0.0.1です。IPアドレスはサーバーに1つずつ付与されるのではなく、ネットワークインターフェイスに割り当てられるため、各ネットワークインターフェイスに異なるIPアドレスがあります。[HWaddr] : ネットワークインターフェイスのハードウェアアドレス(MAC Address)[inetaddr] : ネットワークインターフェイスに割り当てられたIPアドレス[Bcast] : ブロードキャストアドレス[Mask] : ネットマスク[MTU] : ネットワーク最大伝送単位(Maxium Transfer Unit)[RX packets] : 受信したパケット情報[TX packets] : 送信したパケット情報[collision] : 衝突したパケット数[Interrupt] : ネットワークインタフェースが使用する割り込み番号Ifconfig コマンドでは private ip しか確認されません。認定アイピー(Public IP)を知りたい場合は、Curlをインストール後に確認するだけです。
$curl ifconfig.me
top: オペレーティングシステムの作業履歴のモニタリング ウィンドウの作業管理者と同様の機能をするコマンドです。
プロセス作業命令で、システムプロセスのCPU /メモリ占有率をリアルタイムで表示できます。現在、いくつのプロセスがあるのか、CPUの詳細な使用率はどうなるのか、MemoryとSwapはどのくらい使用しているのかを確認できます。
% Cpu(s)
[us] : ユーザーが使用している使用率[sy] : システムが使用中の使用率[ni] : プロセス優先順位に基づいて使用される使用率(ユーザー空間で使用される)[id] : 何もしない余裕率[wa] : 入出力を待つプロセス使用率[hi] : ハードウェア割り込み使用率[si] : ソフトウェア割り込み使用率[st] : 仮想化環境での損失率User値が高い場合、ユーザーコードを実行するのに時間がかかる場合は、内部的に計算を多くしているということです。System値が高い場合、システムによって使用されている時間が長くかかる場合、プロセスはシステムコールまたはI / Oが多いと言えます。idleの値が常に0の場合、CPUを100%使用していることを意味します。CPUを使い続けているプロセスを見つけて適切に対応する必要があります。
PROCESS
[PID] : プロセスID[USER] : プロセスを実行したユーザーID[PR] : プロセスの優先順位[NI] : NICE 値、マイナスを持つ値が優先順位が高い[VIRT] : 仮想メモリの使用量(SWAP+RES)[RES] : 現在ページが常駐しているサイズ[SHR]: 仮想メモリのうち使用中のメモリを除く残りの仮想メモリ[S] : プロセスの状態[%CPU] : プロセスが使用するCPUの使用率[%MEM] : プロセスが使用するメモリの使用率[TIME+] : プロセスがCPUを使用した時間[COMMAND] : 実行された命令プロセスのリストは、必要な特定の基準に基づいてソートできます。top実行画面でShiftキーと英字を押すと、プロセスのソート基準が変更されます。
PROCESS
[SHIFT+M] : メモリ使用率の並べ替え[SHIFT+N] : PID 基準の並べ替え[SHIFT + P]: CPU使用率の並べ替え[SHIFT + T] : 実行時間基準ソート[SHIFT + R]: 整列基準変更(昇順の場合は降順、降順の場合は昇順に変更)
free: メモリのモニタリング メモリに関する情報を確認できます。私はMemoryとSwapの値の合計を確認するために-tオプションを与えました。
[MEM] : 実メモリ[Swap] : 一種の仮想メモリ[Buffers] : 一部のプロセスによって発生した一時メモリ[Cached] : 既存のプログラムが使用していたメモリで実行されているか、新しく起動するプログラムが必要なときにすばやく再利用できるメモリ領域BuffersとCachedはどちらもFree領域の一部なので、実際には2行目に見える364812が実際の空きメモリを指します。つまり、ユーザーが利用可能なメモリです。
実際の使用率は、1行目に見えるused – (buffers + cached)である2行目に見えるused値です。
参考
[$ free -b # or –bytes] : show output in bytes[$ free -k # or –kilo] : show output in kilobytes[$ free -m # or –mega] : show output in megabytes[$ free -g # or –giga] : show output in gigabytes
vmstat: システム情報のモニタリング システムの操作、ハードウェア、およびシステム情報を確認できます。メモリ、ページング、ブロックデバイスのI/O、CPU状態などを見ることができます。
procs
[r] : CPU で待機中のプロセスの数を意味します。rの数がCPUの数の2倍を超える場合は、CPUの性能を上げる必要があります。[b] : 割り込みが不可能なスリープ状態にあるプロセスの数(I/O 処理中にブロック処理されたプロセス)です。bの数値が高い場合は、CPUが待機状態になっているという意味なので、ディスクI/Oを確認してみる必要があります。Swap(KB/s)
[si(swap in)] : ディスク swap 空間にあるデータをメモリに呼び出す量を意味します。使用されているスワップディスクが解放される量(per sec)。[so(swap out)] : メモリからディスクに送信されるデータの量を意味します。物理メモリが不足している場合にディスクから使用されるメモリ量(per sec)。スワップアウトが継続的に発生する場合は、メモリ不足を疑うことができます。swap out値が増加するとメモリが不足しているという意味なので、メモリを増やす必要があります。swap out値は0に近いはずで、毎秒10ブロック以下が良いです。swapフィールドの値が高いとしても、freeメモリに余裕があればメモリが足りないわけではありません。-sオプションを指定すると、メモリ統計項目を確認できます。
vmstat [delay [count]] を使用すると、リアルタイムでメモリの状態を確認できます。
[$ verstat 3 5] : 3秒間隔でモニタリング情報を5回出力
iostat: CPU、ディスク入出力状態のモニタリング 平均CPU負荷とディスクI / Oの詳細を確認できます。
Device
[tps] : デバイスへの1秒あたりの転送要求件数[kB_read/s] : デバイスで毎秒読み取ったデータブロック単位[kB_wrtn/s] : デバイスで毎秒書き込んだデータブロック単位[kB_read] : デバイスで指定した間隔で読み取ったブロック数[kB_wrtn] : デバイスで指定した間隔中に書き込んだ全ブロック数-x オプションを使用すると、より詳細な履歴を表示できます。
iostat [delay [count]]を使用すると、リアルタイムでディスクの状態を確認できます。
[$ iostat 3 5] : 3秒間隔でモニタリング情報を5回出力します。
netstat: ネットワーク状態のモニタリング 現在システムに接続されているネットワークの状態、ルーティングテーブル、インターフェイスの状態などを表示できます。
2つの領域に分かれて表示されます。
[Active Internet connections] : TCP, UDP, raw でリンクされたリストのみが表示されます。[Active UNIX domain sockets]: ドメインソケットでリンクされたリストのみが表示されます。オプションは以下の通りです。
[-n] : ホスト名、ポート名をlookupせず(ドメインに見えず)IP、Port番号を表示します。[-a] : すべてのネットワーク状態を表示します。[-t] : TCP プロトコルのみを表示します。[-u] : UDP プロトコルのみを表示します。[-p] :該当するポートを使用するプログラムとプロセスID(PID)を表示します。[-r] : ルーティングテーブル出力[-s] : プロトコル別(IP、ICMP、TCP、UDPなど)で統計を表示します。[-c] : 連続的に状態を表示します。[-l] : 待機中のソケットのリストを表示します。Stateは以下のように表されます。
[空白] : 接続されていない[FREE] : socket は存在するが割り当てられていない。[LISTENING] : 接続要求に対する応答準備ができている状態[CONNECTING] : 接続がただ行われた状態[DISCONNECTING] : 接続解除されている状態[UNKNOWN] : 不明な接続、未知の接続状態[LISTEN] : 接続できるようにデーモンが浮いていて接続可能[SYS-SENT] : 接続を要求した状態[SYN_RECEIVED] :接続要求に応答した後に確認メッセージを待っている状態[ESTABLISHED] : 接続が完了した状態[FIN-WAIT1] : ソケットが閉じて接続が終了している状態[FIN-WAIT2] : ローカルがリモートから接続終了要求を待っている状態[CLOSE-WAIT] : 終了待機中[CLOSING] : 送信されたメッセージが失われた[TIME-WAIT] : 接続終了後しばらく維持されている[CLOSED] : 接続が完全に終了オプションによって他の情報を確認できます。役に立つオプションは知っておく必要があります。
[$netstat -r] :サーバーのルーティングテーブル出力[$netstat -na --ip] : tcp/udp のセッションリストを表示する[$ netstat -na | grep ESTABLISHED | wc -l] : 有効なセッション数の確認[$ netstat -nap | grep:80 | grep ESTABLISHED | wc -l] : 80ポート同時接続者数[$netstat -nltp] : LISTEN 中のポート情報を表示
df: ディスクモニタリング 現在のディスクの総容量と残容量を確認できます。
オプションは以下の通りです。
[-h] : 容量を読みやすく単位を計算して出力[-T] : ファイルシステムの種類とともにディスク情報を出力
おわりに これまでのシステムモニタリングを知ることができるコマンドについて調べてみました。これらの情報により、インフラのモニタリングを行うことができます。Linuxデバイスが基本的に提供するコマンドであるため、いつでも使用できます。
それでは、WhaTap Server Monitoring などのモニタリングサービスはいつ使用するのでしょうか。WhaTap Server Monitoringサービスは、端末にアクセスしていなくても、Webやアプリを介してリモートで閲覧でき、過去の過去のデータを見ることができます。そして、定期的に状態を監視し、問題が発生したときにメール、アプリ、文字などを通じて迅速な対処が可能になるのに役立ちます。
Linuxのモニタリングコマンドを習得して、独自のモニタリング手法を作成してみてください。そして、WhaTap Server Monitoringなどのモニタリングサービスを使用して、さまざまなインサイトが得られますように願っています。