1/99スタックエンジニアの適当記録

適当なことを書きます。関西で転職したいです。

システムが遅いと感じた時に遅延発生してないか調べる

NWがつよつよじゃないので、調べながら思いついた方法でNW遅延を調べてみた時の内容を記録しておく。

 

詳しい人に聞きたいなということで一応Teraterilで質問もしてみた。

teratail.com

 

さてさて、

まず構成として、遠隔地の拠点がいくつかあるのだが、それぞれの構成をかんたんに書くと、

端末(windwos)-SW(cisco)-RT-***-RT-SW-サーバー

という構成になっている。

ここで、ある拠点の端末でシステムが遅いという話があった。

しかし、別の拠点を確認すると、他の拠点は問題ないということだったので、どうやら、その拠点だけの問題だということがわかる。

さらに、その拠点はSWが複数台設置してあり、他のSWの経路は問題ないため、RTまでの通信は問題なさそうだということも切り分けできた。

 

端末からSWの経路が怪しい

ということで、どうやら「端末からスイッチ」の経路が怪しいということまで目星をつけれた。

(一応、ルータのポートの問題も考えられるが、おそらく可能性は低いので、スイッチ端末間を先に潰す方針とした。)

では、実際どの程度遅延が発生しているのか、ということで、お互いにpingを飛ばしてみる。

SW(cisco)にログインし、端末宛へpingを飛ばす。

すると、通常のpingだと問題なく通信できることは確認できた。

では、サイズを大きくするとどうか。

調べるとわかるが、windowspingでは最大65500byte、ciscoスイッチのpingも(自宅にはciscoがないので忘れてしまった..)最大60000byteほどのパケットを指定できる。

そこで、例えば5000byteのパケットを端末宛へ10回飛ばしてみたところ、全く飛ばず、すべてタイムアウトする。

そのままサイズと下げていくと、200byteでは全くタイムアウトしないが、300byteからタイムアウトするようになり、サイズを大きくするに従って、タイムアウトの頻度が大きくなっていくことがわかった。

 

通常どのくらいのパケットが行き来しているか

次の疑問として、では「通常どのくらいのパケットサイズが行き来しているのか」ということだ。

200byteの通信ならば問題ないので、システムが利用しているパケットがサイズが常に200byteの通信であれば遅延が発生しようがない。

そうなると別の問題という話になる。

そこで、パケットサイズを調べてみるとMTU値というのがある。

そういえば基本情報でそんな値があったような気がするが、机上の知識で実務に全く結びついていなかったのだが残念なのだが、この設定値は端末が保持している、「送信データの最大値」のことである。

では、MTU「MaximamTransmissionUnit」は、いくらに設定されているかWindowsの端末で調べてみた。

netsh interface ipv4 show interfaces

f:id:roku28632:20200509123314p:plain

WifiBluetoothなど、それぞれに設定があるが、大体の値が1500に設定されている。

これはデフォルト値なのだが、なぜ1500byteなのかというと、そもそもイーサネットの最大値が1500byteだからである。

ちなみに、光ファイバは4352byteらしく、なぜ、イーサネットより光ファイバのほうがスピードが速いのがわかって、「なるほど~」と感心していると、話がそれるので、本編に戻ると、1500byteの通信が一度に送れるパケットサイズなので、例えば15kbyteのhtmlを生成するのに、10回パケットが送られているが、その間、何度もタイムアウトしているというこになるので、その分再送されて遅延が発生していたということがわかる。

やはり原因は端末スイッチ間

これで切り分けとして原因が、確実に端末スイッチ間にあるということがわかった。

 

根本原因は?

では気になる根本原因だが、切り分けしたところで、別の担当にバトンタッチしてしまったので、また原因を教えてもらったら書こうと思う。

 

感想

とりあえず、切り分けはこんな感じにやってみて、机上の知識と実務がかみ合った感じがしたので、個人的にうれしかった。

 

以上