この章では、ネットワーク性能を監視する方法について説明します。この章で説明する手順は次のとおりです。
表 65-1 は、ネットワーク性能の監視に使用できるコマンドを示しています。
表 65-1 ネットワーク監視コマンド
コマンド |
用途 |
---|---|
ping |
ネットワーク上でホストの応答を調べる。 |
spray |
パケットサイズの信頼性をテストする。パケットが遅延またはドロップされていないかどうかを判別できる。 |
snoop |
ネットワークからパケットを取り込み、各クライアントから各サーバーへのコールを追跡する。 |
netstat |
TCP/IP トラフィックに使用されるインタフェース、IP ルーティングテーブル、UDP、TCP、ICMP、IGMP に関するプロトコルごとの統計情報など、ネットワークの状態が表示される。 |
nfsstat |
NFS の問題の分析に使用できるサーバーとクライアントの統計情報の集計が表示される。 |
ping コマンドを使用して、ネットワーク上のホストの応答をチェックします。
$ ping hostname
物理的な問題があると思われる場合は、ping を使用してネットワーク上の複数のホストの応答時間を調べることができます。あるホストからの応答が期待したとおりでない場合は、そのホストを調査できます。物理的な問題は、次の原因で発生することがあります。
このコマンドについての詳細は、ping(1M) のマニュアルページを参照してください。
ping の最も単純なバージョンは、ネットワーク上のホストにパケットを 1 つ送信します。正しい応答を受信すると、メッセージ「host is alive」を出力します。
$ ping elvis elvis is alive
-s オプションを指定すると、ping は 1 秒ごとに 1 つずつデータグラムをホストに送信します。その後で、次のように各応答と往復の所要時間を出力します。
$ ping -s pluto 64 bytes from pluto (123.456.78.90): icmp_seq=0. time=10. ms 64 bytes from pluto (123.456.78.90): icmp_seq=5. time=0. ms 64 bytes from pluto (123.456.78.90): icmp_seq=6. time=0. ms ^C ----pluto PING Statistics---- 8 packets transmitted, 8 packets received, 0% packet loss round-trip (ms) min/avg/max = 0/2/10
spray コマンドを使用すると、パケットサイズの信頼性をテストできます。
$ spray [ -c count -d interval -l packet_size] hostname
-c count |
送信するパケット数 |
-d interval |
パケットを送信するたびに一時停止するマイクロ秒数。遅延を使用しないと、バッファーを使い果たす可能性がある。 |
-l packet_size |
パケットサイズ |
hostname |
パケットを送信するシステム |
このコマンドについての詳細は、spray(1M) のマニュアルページを参照してください。
次の例では、それぞれが 2048 バイト (-l 2048) のパケット 100 個 (-c 100) がホストに送信されます 。パケットは、各バースト間で 20 マイクロ秒の遅延時間 (-d 20) ごとに送信されます。
$ spray -c 100 -d 20 -l 2048 pluto sending 100 packets of length 2048 to pluto ... no packets dropped by pluto 279 packets/sec, 573043 bytes/sec
ネットワークからパケットを取り込み、各クライアントから各サーバーへのコールを追跡するには、snoop を使用します。このコマンドは、ネットワーク性能の問題を素早く発見できるように正確なタイムスタンプを提供します。詳細は、snoop(1M) のマニュアルページを参照してください。
# snoop
パケットがドロップされる場合は、バッファー領域不足または CPU の過負荷が原因となっていることがあります。
netstat コマンドを使用すると、ネットワークインタフェース、ルーティングテーブル、各種プロトコルの状態に統計情報など、ネットワークの状態に関する情報を表示できます。
$ netstat [-i] [-r] [-s]
-i |
TCP/IP インタフェースの状態を表示する。 |
-r |
IP ルーティングテーブルを表示する。 |
-s |
UDP、TCP、ICMP、IGMP プロトコルの統計情報を表示する。 |
詳細は、netstat(1M) のマニュアルページを参照してください。
次の例は、netstat -i コマンドからの出力を示しています。このコマンドは、TCP/IP トラフィックに使用されるインタフェースの状態を表示します。
$ netstat -i Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis Queue lo0 8232 software localhost 1280 0 1280 0 0 0 le0 1500 loopback venus 1628480 0 347070 16 39354 0
この表示画面は、マシンが各インタフェース上で送受信したパケット数を示しています。有効なネットワークトラフィックがあるマシンは、Ipkts と Opkts が絶えず増加し続けるはずです。
衝突カウント (Collis) を発信パケット数 (Opkts) で割ると、ネットワーク衝突率を計算できます。上記の例では、衝突率は 3.5 パーセントです。ネットワーク全体の衝突率が 5 ないし 10 パーセントを超える場合は、問題が発生していることがあります。
入力エラー数を合計入力パケット数で割ると (Ierrs/Ipkts)、入力パケットエラー率を計算できます。出力パケットエラー率は、出力エラー数を合計出力パケット数で割った値 (Oerrs/Opkts) です。入力エラー率が高い (0.25 パーセントを超える) 場合は、ホストがパケットをドロップしている可能性があります。
次の例は、netstat -s コマンドからの出力を示しています。このコマンドは、UDP、TCP、ICMP、IGMP プロトコルに関してプロトコルごとの統計情報を表示します。
UDP udpInDatagrams =196543 udpInErrors = 0 udpOutDatagrams =187820 TCP tcpRtoAlgorithm = 4 tcpRtoMin = 200 tcpRtoMax = 60000 tcpMaxConn = -1 tcpActiveOpens = 26952 tcpPassiveOpens = 420 tcpAttemptFails = 1133 tcpEstabResets = 9 tcpCurrEstab = 31 tcpOutSegs =3957636 tcpOutDataSegs =2731494 tcpOutDataBytes =1865269594 tcpRetransSegs = 36186 tcpRetransBytes =3762520 tcpOutAck =1225849 tcpOutAckDelayed =165044 tcpOutUrg = 7 tcpOutWinUpdate = 315 tcpOutWinProbe = 0 tcpOutControl = 56588 tcpOutRsts = 803 tcpOutFastRetrans = 741 tcpInSegs =4587678 tcpInAckSegs =2087448 tcpInAckBytes =1865292802 tcpInDupAck =109461 tcpInAckUnsent = 0 tcpInInorderSegs =3877639 tcpInInorderBytes =-598404107 tcpInUnorderSegs = 14756 tcpInUnorderBytes =17985602 tcpInDupSegs = 34 tcpInDupBytes = 32759 tcpInPartDupSegs = 212 tcpInPartDupBytes =134800 tcpInPastWinSegs = 0 tcpInPastWinBytes = 0 tcpInWinProbe = 456 tcpInWinUpdate = 0 tcpInClosed = 99 tcpRttNoUpdate = 6862 tcpRttUpdate =435097 tcpTimRetrans = 15065 tcpTimRetransDrop = 67 tcpTimKeepalive = 763 tcpTimKeepaliveProbe= 1 tcpTimKeepaliveDrop = 0 IP ipForwarding = 2 ipDefaultTTL = 255 ipInReceives =11757234 ipInHdrErrors = 0 ipInAddrErrors = 0 ipInCksumErrs = 0 ipForwDatagrams = 0 ipForwProhibits = 0 ipInUnknownProtos = 0 ipInDiscards = 0 ipInDelivers =4784901 ipOutRequests =4195180 ipOutDiscards = 0 ipOutNoRoutes = 0 ipReasmTimeout = 60 ipReasmReqds = 8723 ipReasmOKs = 7565 ipReasmFails = 1158 ipReasmDuplicates = 7 ipReasmPartDups = 0 ipFragOKs = 19938 ipFragFails = 0 ipFragCreates =116953 ipRoutingDiscards = 0 tcpInErrs = 0 udpNoPorts =6426577 udpInCksumErrs = 0 udpInOverflows = 473 rawipInOverflows = 0 ICMP icmpInMsgs =490338 icmpInErrors = 0 icmpInCksumErrs = 0 icmpInUnknowns = 0 icmpInDestUnreachs = 618 icmpInTimeExcds = 314 icmpInParmProbs = 0 icmpInSrcQuenchs = 0 icmpInRedirects = 313 icmpInBadRedirects = 5 icmpInEchos = 477 icmpInEchoReps = 20 icmpInTimestamps = 0 icmpInTimestampReps = 0 icmpInAddrMasks = 0 icmpInAddrMaskReps = 0 icmpInFragNeeded = 0 icmpOutMsgs = 827 icmpOutDrops = 103 icmpOutErrors = 0 icmpOutDestUnreachs = 94 icmpOutTimeExcds = 256 icmpOutParmProbs = 0 icmpOutSrcQuenchs = 0 icmpOutRedirects = 0 icmpOutEchos = 0 icmpOutEchoReps = 477 icmpOutTimestamps = 0 icmpOutTimestampReps= 0 icmpOutAddrMasks = 0 icmpOutAddrMaskReps = 0 icmpOutFragNeeded = 0 icmpInOverflows = 0 IGMP: 0 messages received 0 messages received with too few bytes 0 messages received with bad checksum 0 membership queries received 0 membership queries received with invalid field(s) 0 membership reports received 0 membership reports received with invalid field(s) 0 membership reports received for groups to which we belong 0 membership reports sent
次の例は、netstat -r コマンドからの出力を示しています。このコマンドは、IP ルーティングテーブルを表示します。
Routing Table: Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ------ --------- localhost localhost UH 0 2817 lo0 earth-bb pluto U 3 14293 le0 224.0.0.0 pluto U 3 0 le0 default mars-gate UG 0 14142
表 65-2 は、netstat -r レポート内のフィールドを示しています。
表 65-2 netstat -r コマンドからの出力
フィールド名 |
|
説明 |
---|---|---|
Flags |
U G H D |
ルートが動作している。 ルートはゲートウェイを経由する。 ルートはホスト宛てである。 ルートはリダイレクトを使用して動的に作成された。 |
Ref |
|
同じリンク層を共有する現在のルート数を示す。 |
Use |
|
送信されたパケット数を示す。 |
Interface |
|
ルートに使用されるネットワークインタフェースを表示する。 |
NFS 分散ファイルサービスは、ローカルコマンドをリモートホストへの要求に変換するリモートプロシージャコール (RPC) 機能を使用します。リモートプロシージャコールは同期しています。つまり、クライアントアプリケーションは、サーバーがコールを完了して結果を返すまでブロックまたは中断されます。NFS の性能に影響を及ぼす重要な要素の 1 つは再伝送率です。
ファイルサーバーがクライアントの要求に応答できない場合、クライアントは指定された回数だけ要求を再伝送して終了します。再伝送されるたびにシステムにオーバーヘッドがかかり、ネットワークトラフィックが増大します。再伝送率が高すぎると、ネットワーク性能が低下します。再伝送率が高い場合は、次のことを調べます。
表 65-3 に、クライアントとサーバーの統計情報を表示するための nfsstat オプションを説明します。
表 65-3 クライアント/サーバー統計情報を表示するためのコマンド
nfsstat のオプション |
表示されるもの |
---|---|
nfsstat -c |
クライアントの統計情報 |
nfsstat -s |
サーバーの統計情報 |
netstat -m |
ファイルシステムごとのネットワーク統計情報 |
nfsstat -c を使用するとクライアントの統計情報が表示され、nfsstat -s を使用するとサーバーの統計情報が表示されます。また、netstat -m を使用すると各ファイルシステムのネットワーク統計情報が表示されます。詳細は、nfsstat(1M) のマニュアルページを参照してください。
次の例は、クライアント pluto に関する RPC と NFS のデータを示しています。
$ nfsstat -c Client rpc: Connection oriented: calls badcalls badxids timeouts newcreds badverfs timers 1595799 1511 59 297 0 0 0 cantconn nomem interrupts 1198 0 7 Connectionless: calls badcalls retrans badxids timeouts newcreds badverfs 80785 3135 25029 193 9543 0 0 timers nomem cantsend 17399 0 0 Client nfs: calls badcalls clgets cltoomany 1640097 3112 1640097 0 Version 2: (46366 calls) null getattr setattr root lookup readlink read 0 0% 6589 14% 2202 4% 0 0% 11506 24% 0 0% 7654 16% wrcache write create remove rename link symlink 0 0% 13297 28% 1081 2% 0 0% 0 0% 0 0% 0 0% mkdir rmdir readdir statfs 24 0% 0 0% 906 1% 3107 6% Version 3: (1585571 calls) null getattr setattr lookup access readlink read 0 0% 508406 32% 10209 0% 263441 16% 400845 25% 3065 0% 117959 7% write create mkdir symlink mknod remove rmdir 69201 4% 7615 0% 42 0% 16 0% 0 0% 7875 0% 51 0% rename link readdir readdir+ fsstat fsinfo pathconf 929 0% 597 0% 3986 0% 185145 11% 942 0% 300 0% 583 0% commit 4364 0% Client nfs_acl: Version 2: (3105 calls) null getacl setacl getattr access 0 0% 0 0% 0 0% 3105 100% 0 0% Version 3: (5055 calls) null getacl setacl 0 0% 5055 100% 0 0%
表 65-4 は、nfsstat -c コマンドの出力を示しています。
表 65-4 nfsstat -c コマンドの出力
フィールド名 |
説明 |
---|---|
calls |
送信された合計コール数 |
badcalls |
RPC によって拒否された合計コール数 |
retrans |
再伝送の合計回数。このクライアントの場合、再伝送回数は 1 パーセント未満 (6888 回のコールのうち 10 回のタイムアウト)。これは、一時的な障害が原因で発生することがある。1 パーセント以上の値は、問題が発生している場合がある。 |
badxid |
1 つの NFS 要求に対して重複する承認を受信した回数 |
timeout |
タイムアウトになったコール数 |
wait |
クライアントハンドルを利用できないためにコールが待機せざるを得なかった回数 |
newcred |
認証情報を再表示しなければならなかった回数 |
timers |
タイムアウト値がコールに対して指定されたタイムアウト値以上になった回数 |
readlink |
シンボリックリンクに対して読み込まれた回数。この数が大きすぎる (10 パーセントを超える) ときは、シンボリックリンクが多すぎることを示す場合がある。 |
次の例は、nfsstat -m コマンドからの出力を示しています。
pluto$ nfsstat -m /usr/man from pluto:/export/svr4/man Flags: vers=2,proto=udp,auth=unix,hard,intr,dynamic, rsize=8192, wsize=8192,retrans=5 Lookups: srtt=13 (32ms), dev=10 (50ms), cur=6 (120ms) All: srtt=13 (32ms), dev=10 (50ms), cur=6 (120ms)
表 65-5 は、この nfsstat -m コマンドのミリ秒単位で表示された出力を示しています。
表 65-5 nfsstat -m コマンドの出力
フィールド名 |
説明 |
---|---|
srtt |
平準化された平均往復時間 |
dev |
平均偏差 |
cur |
現在の「予想」応答時間 |