Solaris のシステム管理 (ネットワークサービス)

ネットワークパフォーマンスの監視

表 30–1 に、ネットワークのパフォーマンスを監視するために使用できるコマンドを示します。

表 30–1 ネットワーク監視コマンド

コマンド 

説明 

ping

ネットワーク上でホストの応答を調べる 

spray

送信したパケットサイズの信頼性を検査する。パケットが遅延されていないか、落とされていないか判定できる 

snoop

ネットワークからパケットを捕捉し、各クライアントから各サーバーへの呼び出しを追跡する 

netstat

TCP/IP トラフィックに使用されるインタフェースや IP ルーティングテーブルなどに関するネットワーク状態と、UDPTCPICMP、および IGMP についてのプロトコル別の統計情報を表示する

nfsstat

NFS の問題を解析するのに使用できる、サーバーおよびクライアントの統計情報の要約を表示する 

ネットワーク上でホストの応答を検査する方法

ping コマンドを使用して、ネットワーク上のホストの応答を検査します。


$ ping hostname

物理的な問題が発生していると思われる場合は、ping コマンドを使用して、ネットワーク上にある複数のホストの応答時間を調べることができます。あるホストからの応答が期待していたものと異なる場合は、そのホストについて調査します。物理的な問題が発生する理由を次に示します。

このコマンドの詳細は、ping(1M) のマニュアルページを参照してください。


例 30–1 ネットワーク上のホストの応答を検査する

もっとも簡単な 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=3.82 ms
64 bytes from pluto (123.456.78.90): icmp_seq=5. time=0.947 ms
64 bytes from pluto (123.456.78.90): icmp_seq=6. time=0.855 ms
^C
----pluto PING Statistics----
3 packets transmitted, 3 packets received, 0% packet loss
 
round-trip (ms) min/avg/max/sttdev = 0.855/1.87/3.82/1.7

ネットワーク上でホストへパケットを送信する方法

spray コマンドを使用すると、送信したパケットサイズの信頼性を検査できます。


$ spray [ -c count -d interval -l packet-size] hostname
-i count

送信するパケット数

-d interval

パケットの送信ごとに一時停止するマイクロ秒数。遅延を使用しないと、バッファーを使い果たす可能性がある

-l packet-size

パケットサイズ

hostname

パケットを送信するシステム

このコマンドの詳細は、spray(1M) のマニュアルページを参照してください。


例 30–2 ネットワーク上のホストへパケットを送信する

次の例では、各パケットサイズが 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

UDPTCPICMP、および 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
eri0   1500 loopback    venus      1628480   0   347070    16   39354    0

上記の表示例は、マシンが各インタフェース上で送受信したパケット数を示しています。有効なネットワークトラフィックが存在するマシンでは、IpktsOpkts が継続的に増加しています。

ネットワーク衝突率は、衝突カウント (Collis) を出力パケットの数 (Opkts) で割ることにより算出できます。上記の例では、衝突率は 11%です。ネットワーク全体の衝突率が 5 から 10 %を超える場合には、問題が発生している可能性があります。

入力パケットのエラー率 (Ierrs/Ipkts) は、入力エラー数を合計入力パケット数で割ることにより算出できます。出力パケットのエラー率 (Oerrs/Opkts) は、出力エラー数を合計出力パケット数で割ることにより算出できます。入力エラー率が高い場合 (0.25% を超えている場合)、ホストがパケットを落としている可能性があります。

次に、netstat -s コマンドの出力例を示します。このコマンドは、UDPTCPICMP、および 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  eri0
224.0.0.0            pluto                 U        3      0  eri0
default              mars-gate             UG       0  14142  
 

表 30–2 は、netstat -r コマンドが出力するレポート中のフィールドを説明しています。

表 30–2 netstat -r コマンドの出力

フィールド名 

 

説明 

Flags

U

G

H

D

ルートが正常に動作している 

ルートはゲートウェイを経由する 

ルートはホスト宛である 

ルートはリダイレクトを使用して動的に作成された 

Ref

 

同じリンク層を共有している現在のルート数を示す 

Use

 

送信されたパケット数を示す 

Interface

 

ルートに使用されるネットワークインタフェースを表示する  

NFS サーバーとクライアントの統計情報を表示する方法

NFS 分散型ファイルサービスは、ローカルコマンドをリモートホストへの要求に変換する、遠隔手続き呼び出し (RPC) 機能を使用します。遠隔手続き呼び出しは同期型の呼び出しです。サーバーが呼び出しを完了してその結果を返すまで、クライアントアプリケーションはブロックまたは中断されます。NFS のパフォーマンスに影響を与える主要な要素の 1 つに再伝送率があります。

ファイルサーバーがクライアントの要求に応答できない場合、そのクライアントは、指定された回数だけ要求を再伝送して終了します。再伝送のたびにシステムにオーバーヘッドがかかり、ネットワークトラフィックが増加します。過度の再伝送はネットワークのパフォーマンスを低下させます。再伝送率が高い場合、次を調べてください。

表 30–3 に、クライアントとサーバーの統計情報を表示するための nfsstat コマンドのオプションとその説明を示します。

表 30–3 クライアントとサーバーの統計情報を表示するためのコマンド

コマンド 

表示される情報 

nfsstat -c

クライアントの統計情報 

nfsstat -s

サーバーの統計情報 

netstat -m

ファイルシステムごとのネットワーク統計情報 

クライアントの統計情報を表示するには nfsstat -c を使用し、サーバーの統計情報を表示するには nfsstat -s を使用します。また、ファイルシステムごとのネットワークの統計情報を表示するには、nfsstat -m を使用します。詳細は、nfsstat(1M) のマニュアルページを参照してください。

例 – NFS サーバーとクライアントの統計情報を表示する

次の例は、クライアント 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%    

表 30–4 に、nfsstat -c コマンドの出力とその説明を示します。

表 30–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)

表 30–5 に、ミリ秒単位で表示される nfsstat -m コマンドの出力を示します。

表 30–5 nfsstat -m コマンドの出力

フィールド 

説明 

srtt

平準化された平均往復時間 

dev

平均偏差 

cur

現在の「予測」応答時間 

ネットワークのハードウェアコンポーネントに問題の原因があると思われる場合は、ケーブルおよびコネクタを綿密にチェックしてください。