この章ではネットワークのパフォーマンスを監視する方法について説明します。この章で説明する手順は次のとおりです。
表 46–1 に、ネットワークのパフォーマンスを監視するために使用できるコマンドを示します。
表 46-1 ネットワーク監視コマンド
コマンド名 |
説明 |
---|---|
ping |
ネットワーク上でホストの応答を調べる |
spray |
送信したパケットサイズの信頼性を検査する。パケットが遅延されていないか、落とされていないか判定できる |
snoop |
ネットワークからパケットを捕捉し、各クライアントから各サーバーへの呼び出しを追跡する |
netstat |
TCP/IP トラフィックに使用されるインタフェースや IP ルーティングテーブルなどに関するネットワーク状態と、UDP、TCP、ICMP、および IGMP についてのプロトコル別の統計情報を表示する |
nfsstat |
NFS の問題を解析するのに使用できる、サーバーおよびクライアントの統計情報の要約を表示する |
ping コマンドを使用して、ネットワーク上のホストの応答を検査します。
$ ping hostname |
物理的な問題が発生していると思われる場合は、ping コマンドを使用して、ネットワーク上にあるホストの応答時間を調べることができます。あるホストからの応答が期待していたものと異なる場合は、そのホストについて調査します。物理的な問題が発生する理由を次に示します。
このコマンドの詳細については、ping(1M) のマニュアルページを参照してください。
最も簡単な ping コマンドの使い方は、ネットワーク上のホストへ 1 つのパケットを送信することです。ping コマンドが正しい応答を受信すると、「host is alive」というメッセージが表示されます。
$ ping elvis elvis is alive |
-s オプションを指定すると、ping は 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 |
-i 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) で割ることにより算出できます。上記の例では、衝突率は 11%です。ネットワーク全体の衝突率が 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 |
表 46–2 は、netstat -r コマンドが出力するレポート中のフィールドを説明します。
表 46-2 netstat -r コマンドの出力
フィールド名 |
|
説明 |
---|---|---|
Flags |
U G H D |
ルートが正常に動作している ルートはゲートウェイを経由する ルートはホスト宛である ルートはリダイレクトを使用して動的に作成された |
Ref |
|
同じリンク層を共有している現在のルート数を示す |
Use |
|
送信されたパケット数を示す |
Interface |
|
ルートに使用されるネットワークインタフェースを表示する |
NFS 分散型ファイルサービスは、ローカルコマンドをリモートホストへの要求に変換する、リモート手続き呼び出し (RPC) 機能を使用します。リモート手続き呼び出しは同期型の呼び出しです。つまり、サーバーが呼び出しを完了してその結果を返すまで、クライアントアプリケーションはブロックまたは中断されます。NFS のパフォーマンスに影響を与える主要な要素の 1 つに再伝送率があります。
ファイルサーバーがクライアントの要求に応答できない場合、そのクライアントは、指定された回数だけ要求を再伝送して終了します。再伝送のたびにシステムにオーバーヘッドがかかり、ネットワークトラフィックが増加します。過度の再伝送はネットワークのパフォーマンスを低下させます。再伝送率が高い場合、次を調べてください。
表 46–3 に、クライアントとサーバーの統計情報を表示するための nfsstat コマンドのオプションとその説明を示します。
表 46-3 クライアントとサーバーの統計情報を表示するためのコマンド
コマンド名 |
表示される情報 |
---|---|
nfsstat -c |
クライアントの統計情報 |
nfsstat -s |
サーバーの統計情報 |
netstat -m |
ファイルシステムごとのネットワーク統計情報 |
クライアントの統計情報を表示するには nfsstat -c を使用し、サーバーの統計情報を表示するには nfsstat -s を使用します。また、ファイルシステムごとのネットワークの統計情報を表示するには、nfsstat -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% |
表 46–4 に、nfsstat -c コマンドの出力とその説明を示します。
表 46-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) |
表 46–5 に、ミリ秒単位で表示される nfsstat -m コマンドの出力を示します。
表 46-5 nfsstat -m コマンドの出力
フィールド |
説明 |
---|---|
srtt |
平準化された平均往復時間 |
dev |
平均偏差 |
cur |
現在の「予測」応答時間 |