2009-11-22 57 views
8

WindowsのC++からgetaddrinfoを使用してDNSクエリを実行しています。私はWindows API DnsQueryを使用していましたが、うまくいきましたが、私のソフトウェアにIPv6サポートを追加すると、getaddrinfoに切り替えました。それ以来、私は以下を見てきました:getaddrinfoからの応答が遅い

私の問題は、いくつかの時間getaddrinfoが完了するのに非常に時間がかかることです。 getaddrinfoの典型的な応答はほんの数ミリ秒かかりますが、10000回のうち約1時間ですが、場合によっては15秒程度かかりますが、数分かかる場合もあります。

私は、サーバー上のWiresharkを実行し、私のアプリケーションのデバッグログを分析し、以下を参照してくださいました。

  • 私は、関数のgetaddrinfoを呼び出します。
  • 15秒後、私のマシンはDNSサーバに問い合わせます。
  • ミリ秒後に、私はDNSサーバーから応答を受け取ります。

実際のDNSクエリはわずか10分の1秒しかかかりませんが、getaddrinfoが実際に実行する時間はかなり長くなります。

問題は多くのユーザーから報告されているため、私のマシンに固有の問題ではありません。

これで、getaddrinfoはDNSサーバーに何か連絡するのですか?

編集:

  • 問題は、いくつかのアドレスで発生しました。これらのアドレスを使用して問題を再現しようとすると、問題は発生しません。
  • 私は何か愚かなことをしました。すべてのDNSクエリで、etc/servicesが解析されます。しかし、それは数分間の遅延を説明するものではありません。私のソフトウェアによって行われたDNSクエリの(おかげD.Shawley)

編集2

  • 一つのタイプは、アンチスパムDNSBLクエリです。 1人のユーザーからのログでは、ip.address1.example.comの検索では常に正確に2039秒かかっていたようですが、another.ip.address.example.comの検索では常に正確に1324秒かかりました。それ以降の翌日、それらのアドレスのルックアップはうまくいきました。最初はDNS BLの作者が何らかのタイムアウトを彼らの側に置いていると思っていました。しかし、これがコアの問題だった場合、getaddrinfoは以前にタイムアウトしていたはずですか?
+0

特定の特定のアドレスが遅いクエリのみですか? – SimonJ

+0

FileMonのようなものを実行し、 'c:\ windows \ system32 \ drivers \ etc \ services'と' c:\ windows \ system32 \ drivers \ etc \ hosts'を毎回読んでパーズするような何かをしないようにしてくださいあなたが 'getaddrinfo()'と呼ぶ時間です。 –

+1

少なくとも、すべての呼び出しでhostsファイルを解析するのはほぼ確実ですが、それは1ミリ秒または2秒を超えてはなりません。 –

答えて

3

WindowsにはDNSキャッシングを行うローカルデーモンがあります。 getaddrinfo()への呼び出しが、そのデーモンにルーティングされています。このデーモンは、クエリをDNSサーバーに送信する前に、おそらくキャッシュをチェックしています。

キャッシュを無効にする方法の詳細については、Windows Knowledge Base article 318803を参照してください。

[編集]

お使いのWindows Server 2003のインスタンスがIPv6用に正しく設定されていないかのようにそれは私に聞こえます。 IPv6ルックアップがタイムアウトすると、IPv4にフォールバックします。などが役立つかもしれないサポート技術情報の記事:

残念ながら、私は任意のWindowsサーバへのアクセスを持っていないので、私はテストすることはできません/複製これは自分。

+2

まあ、その種の答えは私の質問です。しかし、同じキャッシュがDnsQueryで使用されていましたが、その関数を使用するときに問題は見られませんでした。私のソフトウェアは〜10 000の場所に配備されています。私がgetaddrinfoに切り替えるまで、多くのユーザーがこの問題を報告し始めました。また、ローカルDNSキャッシュのルックアップに15秒かかります。 – Nitramk

+0

同じコマンドを複数回発行することで、キャッシュかどうかを確認できます。私はそれがキャッシュを見ていないと思うし、それは問題の一部です。もう1つの問題は、ipv6アドレスも検索され、何らかの理由で特定の設定で検索が遅くなることです。 – highBandWidth

関連する問題