BSD界隈四方山話

第77回 パフォーマンスチェック ネットワークインターフェース編

この記事を読むのに必要な時間:およそ 4.5 分

ネットワークインターフェースチェック

ネットワークインターフェースでどの程度のトラフィックが発生しているのかはnetstat(1)コマンドで確認できます。次のようにnetstat(1)を実行すると,もっともよく使われているネットワークインターフェースの通信量を表示させることができます。特にinputとoutputのbytesの部分を参考にしてください。

 ネットワークインターフェース利用量の表示

% netstat -i 1
            input        (Total)           output
   packets  errs idrops      bytes    packets  errs      bytes colls
        19     0     0       4200         21     0       8848     0
         1     0     0         70          2     0        268     0
        11     0     0       1172         10     0       2177     0
         3     0     0        234          6     0        656     0
         5     0     0        445          4     0       1287     0
         3     0     0        269          3     0        329     0
         2     0     0        205          2     0        248     0
         0     0     0          0          0     0          0     0
        11     0     0       1017         12     0       2325     0
       159     0     0     196743         99     0      18510     0
         6     0     0       1482          8     0        898     0
         1     0     0         70          2     0        268     0
         0     0     0          0          0     0          0     0
         6     0     0        493          6     0       1837     0
        12     0     0       1573         13     0       1907     0
        25     0     0       2975         25     0       3737     0
         4     0     0        430          7     0        696     0
       141     0     0     192568         79     0       9623     0
         2     0     0        228          3     0        390     0
         4     0     0        368          4     0        442     0
       140     0     0     192777         78     0       8423     0

システムに複数のネットワークインターフェースが存在している場合,上記方法では個別に正確な値を知ることができせん。その場合には次のように-Iにネットワークインターフェースの名前を指定してnetstat(1)コマンドを実行します。この方法であればネットワークインターフェースごとのトラフィック情報を表示させることができます。

 特定のネットワークインターフェースを指定して利用量を表示

% netstat -I igb0 1
            input           igb0           output
   packets  errs idrops      bytes    packets  errs      bytes colls
       174     0     0     229221        103     0      12812     0
         2     0     0        196          3     0        418     0
         7     0     0        575          6     0       1837     0
         1     0     0         70          1     0        178     0
         4     0     0        388          3     0        406     0
       139     0     0     193872         76     0       8202     0
       233     0     0      56058        250     0      60452     0
        15     0     0       1214         13     0       2642     0
        13     0     0       3581         13     0       2822     0
         7     0     0        752          8     0       1130     0
         7     0     0        628          5     0        604     0
         3     0     0        250          3     0        342     0
         0     0     0          0          0     0          0     0
         8     0     0        725          7     0       1955     0
         1     0     0         70          1     0        178     0
        23     0     0       6067         24     0       6888     0
        19     0     0       4211         20     0       4240     0
        12     0     0       2732          6     0        904     0
        92     0     0      54486         93     0      54380     0
         3     0     0        257          5     0        477     0
       169     0     0     200364        117     0      16173     0

ネットワークプロトコルごとにシステム全体の統計情報を見るにはnetstat(1)コマンドに-sオプションを指定します。-sオプションを指定するとシステム全体の統計情報を出力させることができます。ただし,この出力はかなりの量になりますので,そのままだと扱いにくいところがあります。

出力に含まれている単語から必要な情報に絞り込むことができます。たとえば,ネットワークの飽和具合を表示させたい場合には,netstat -sの出力を次のようなキーワードを指定して絞込みます。

 ネットワークインターフェースの飽和状況を表示

% netstat -s | grep -E 'retrans|drop|out-of-order|memory problems|overflow'
        218979 data packets (246080911 bytes) retransmitted
        2890 data packets unnecessarily retransmitted
        1677870 out-of-order packets (2204606312 bytes)
        274 discarded due to memory problems
    0 listen queue overflows
    8017023 connections closed (including 84062 drops)
    10484 embryonic connections dropped
    198064 retransmit timeouts
        1285 connections dropped by rexmit timeout
        0 connections dropped by persist timeout
    0 Connections (fin_wait_2) dropped because of timeout
        8232 connections dropped by keepalive
        5880 retransmitted
        0 dropped
        0 bucket overflow
        0 cache overflow
        0 bucket overflow
    0 SACK scoreboard overflow
    1720977 dropped due to no socket
    348 dropped due to full socket buffers
        0 retransmitted DATA chunks
        0 fast retransmitted DATA chunks
    Packet drop statistics:
        0 where process_chunk_drop said break
    0 number of in data drops due to chunk limit reached
    0 number of in data drops due to rwnd limit reached
    0 fragments dropped (dup or out of space)
    0 fragments dropped after timeout
    0 output packets dropped due to no bufs, etc.
    0 group-source queries dropped
    4 total packets dropped due to no ARP entry
    0 fragments dropped (dup or out of space)
    0 fragments dropped after timeout
    0 output packets dropped due to no bufs, etc.
    0 messages dropped due to no socket
    0 multicast messages dropped due to no socket
    0 messages dropped due to full socket buffers
%

エラーに絞って統計情報を表示させるのであれば,次のようなキーワードで絞り込みをかけます。

 ネットワークインターフェースエラーの表示

% netstat -s | grep -E 'bad|checksum'
        59 discarded for bad checksums
        1 discarded for bad header offset field
    21515 bad connection attempts
        0 badack
    0 with bad data length field
    0 with bad checksum
    1 with no checksum
    0 checksum error
    0 bad v-tag
    0 bad SID
    0 bad header checksums
    0 with bad options
    0 datagrams with bad address in header
    0 messages with bad code fields
    8 messages with bad checksum
    0 messages with bad length
    0 messages received with bad checksum
        0 discarded for bad checksums
        0 discarded packets with a bad version
        0 discarded for bad authentication
        0 discarded for bad vhid
        0 discarded because of a bad address list
        /0 packets discarded for bad interface
        0 packets discarded for bad ttl
        0 packets discarded for bad version
        0 packets discarded for bad HMAC
        0 packets discarded for bad action
        0 states discarded for bad values
    0 with bad options
    2 messages with bad code fields
    0 bad checksums
    0 messages with bad length
    0 messages with bad ND options
    0 bad neighbor solicitation messages
    0 bad neighbor advertisement messages
    0 bad router solicitation messages
    0 bad router advertisement messages
    0 bad redirect messages
    0 checksum calculations on inbound
    0 messages with bad checksum
%

ネットワークの負荷が低い段階では気にならないことが多いのですが,トラフィックが多くなってくるとエラーの発生率がいきなり跳ね上がるとか,そういったことが発生することがあります。ドライバに問題があったりカーネル側に問題があることもありますが,チップそのものの性能限界であることもあります。問題が発生する前後などでnetstat(1)経由で統計情報を取得して比較してみるとどういったことが発生しているのかを調べやすくなります。

これ以上細かく調べたいとか,パースペクティブを変更してデータを整理したい場合にはDTraceを使います。ここまでの情報で足りる場合にはnetstat(1)コマンドの出力のみで充分,さらに突っ込んだ情報分析を行いたい場合にはDTraceを使ってさらに統計情報を取得したり加工することになります。

勉強会

第58回 11月29日(火)19:00~ FreeBSD勉強会

2016年11月29日(火)には佐藤広生先生をお招きして第58回FreeBSD勉強会をドワンゴセミナールームで開催します。FreeBSD ZFS性能測定とチューニングのお話をしていただく予定です。第58回FreeBSD勉強会では,FreeBSD勉強会史上初,ニコ生放送を実施します。今後,2ヶ月に1回ほどのペースでFreeBSD勉強会の内容をニコ生放送する予定です。よろしくお願いします。

参加申請はこちらから。

第59回 12月21日(水)19:00~ FreeBSD勉強会会

ストレージシステムの基盤として使われることの多いZFS。いったん運用を開始あるとあとはボリュームの管理や,ハードウェアの管理,またはより高速なハードウェアの利用などを行いたくなってきます。第59回のFreeBSD勉強会ではそうした部分にフォーカスしてZFSの扱い方を紹介します。このところ続けているFreeBSD ZFS解説シリーズです。

参加申請はこちらから。

コメント

コメントの記入