2008年10月4日土曜日

26秒の怪

症状:
cvs がもっさりしている(update やら checkout が始まるのに時間がかかる)
2ヶ月まえくらいから発生していた(らしい)

制限事項:
cvs のサーバには ssh ログインすることはできない

緊急ではなかったけど、放置しておくのもなんだかな、、と思ったので調べた。上記制限事項により、クライアント側からのみ、の調査に留まる。

方法:
tcpdump
wireshark

メモしてなかったけど、Mac OS X のターミナルでだいたい以下のように実行、、

$ sudo tcpdump -n -x -l -v -w ~/Desktop/cvs.tcpdump port 2401

しつつ、cvs checkoutやらupdate を実行して採取した。

ふむ、、、おそい。たしかにおそい。ためしに3回採取し、wireshark で解析。
するとすぐ目についたのが、
「26秒の待ち」。3回とも一様に待ちが発生している。

サーバには入れないので、これを手がかりに調査 & 社内のネットワークのプロに聞く。

すると、、某アプライアンス機器が弾いているという。

しかし26秒てなんだ、、と思って調べていると、 どうも ucspi-tcp パッケージ の tcpserver プログラム が怪しいことに気づく。

http://cr.yp.to/ucspi-tcp/tcpserver.html より
# -t n: Give up on the $TCPREMOTEINFO connection attempt after n seconds. Default: 26.

「タイムアウト」の時間が 26秒なので、タイムアウトする以前に、機能自体を無効にしてしまおう。もちろん -t 0 でもいいけど、、いらないだろう。どうも ident らしいし。

というわけで、ぼくは -HRDl0 が定番オプションだと思ってることもあるので
とりあえず tcpserver 経由の -R オプションつきで起動してなければつけてもらうことに。

ついててこの現象が起こることはないと思われる。

さてどうなるかな。


・・・・と、もし tcpdump, wireshark を使わない、という条件で調べることになったら、どうやるのがいいんだろう?とふと思った。クライアントからは困難か。

0 件のコメント:

コメントを投稿