
■ 前書き
今回の記事は、日経NETWORKという雑誌の「tracert」コマンドを高速実行させる方法が書かれた記事を元に書いたものです。
他人の褌で相撲を取るみたいで恥ずかしいのですが、気になった内容だったので自分なりに試してみました。
■ tracertコマンド
tracert(トレースルート)というのは、通信の経路を調べるコマンドで「tracert 対象ホスト」と実行することで、コマンドを実行した端末から対象ホストまでの通信の経路を表示してくれる便利なコマンドです。
用途としては、通信がつながらなくなった時の原因調査が多いでしょうか?
ある拠点からIDC(データセンター)にあるサーバに接続する処理があったとして、通信がこのように流れているとします。
拠点PC → 拠点ルータ→ IDCルータ → IDCサーバ
んで、障害原因がIDCルータだった場合に拠点PCから「tracert」コマンドを実行すると、拠点ルータまでは繋がる(表示される)けど、そこから先が表示されずにコマンドが終了するようになります。
■ 速度の違い
この「tracert」ってコマンドなのですが、難点は異様に遅いことです。実際に実行してみると分かると思うのですが、経由する個所ごとに数秒の間が発生するため、1回のコマンド実行で数十秒かかります。
障害対策という緊急事態では、この遅さは不便です。
そういうものなんだと思って諦めていたのですが、ある時にUNIX(Solaris)からWindowsの「tracert」コマンドと同様の機能をもつ「traceroute」というコマンドを実行した時に、サクッと結果が戻ってきて不信感を持ちました。
やってることは同じなのに、この速度差は何なんだ?
■ dオプション
ここからが、日経NETWORKに書かれていた内容なのですが、「tracert」コマンドが遅いのは経由した個所のIPアドレスをホスト名に変換していることが原因で、dオプションを付けることでホスト名の解決を行わなくなって早くなるそうなのです。
そういえば、「tracert」コマンドのオプションって考えたことが無かったなぁ。
実験する前に「tracert /?」でヘルプを出して確認してみました。

確かに、dオプションの説明として「アドレスをホスト名に解決しません。」と書いていますが、速度性能については記載がありません。劇的に変わるなら括弧書きで「(実行速度が向上します)」とか書いてくれれば親切なのですが。
■ 実験
コマンドの実行前後でtimeコマンドを実行して実行時間を確認します(手作業なので若干の誤差はあります)。対象はyahoo(yahoo.co.jp)です。
まず、dオプション無しで実行します。

今度は、dオプションを付けて実行します。

それぞれの実行時間は、こんな感じ。
dオプションなし:117秒
dオプションあり:53秒
ふむ、かなり違いますね。
実際に実行して分かったのですが、時間が掛かかったのは、名前解決が失敗した時と、タイムアウトした時の2つ。タイムアウトについてはdオプションの有無に関わらずに時間が掛かったのですが、名前解決が出来なかった個所については劇的に速くなりました。
■ 後書き
うーん、ここまでの性能差があるのなら初期値として名前解決をしないで欲しいものです。オプションを付けることで名前解決をするが、実行時間が長くなるって方が良いと思うのですが、どうして逆なんでしょうね?
ところで、上の方で緊急時にコマンドの実行時間が長くて困ると書きましたが、本当に困るのは、誰かと電話で相談しながらコマンドを打った時のコマンドの結果が戻ってくるまでの間です。
・・・おしゃべりは苦手です。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


