LinuxとJavaDNSルックアップで非常に奇妙な動作が発生しています(更新:Mac OS Xでも発生します—私は間違っていました)。
GoogleパブリックDNSサーバー8.8.8.8をJVMDNSサーバーとして設定しました。ただし、システム(/etc/resolv.conf)サーバーは、標準サーバーghost.di.unimi.itの外にあります。
InetAddress.getAllByName()またはDNSJavaのAddess.getAllByName()を使用してアドレスを検索すると、すべてが期待どおりに機能します(特に、これはDNSJavaです)。
01:39:11.832438 IP nexus.law.di.unimi.it.33195> google-public-dns-a.google.com.domain:46509+ A?www.uffa.com。(30) 01:39:11.832820 IP nexus.law.di.unimi.it.52782> ghost.di.unimi.it.domain:42740+ PTR?8.8.8.8.in-addr.arpa。(38) 01:39:11.833510 IP ghost.di.unimi.it.domain> nexus.law.di.unimi.it.52782:42740 1/2/0PTRgoogle-public-dns-a.google.com。(128) 01:39:11.865165 IP google-public-dns-a.google.com.domain> nexus.law.di.unimi.it.33195:46509 1/0/0 A 208.87.35.103(46)
ご覧のとおり、www.uffa.comを解決すると、認証のために8.8.8.8の逆引き参照(最初の検索で1回だけ発生)が発生します。この時点で、www.uffa.comのIPアドレスがキャッシュされ、TTL内で別の呼び出しを行ってもルックアップは発生しません。
それでも、Apache HTTPコンポーネントのDefaultHttpClientを使用してwww.uffa.comで実際にソケットを開こうとすると、次のように表示されます。
01:40:06.892383 IP nexus.law.di.unimi.it.53977> ghost.di.unimi.it.domain:22255+ PTR?103.35.87.208.in-addr.arpa。(44) 01:40:07.204359 IP ghost.di.unimi.it.domain> nexus.law.di.unimi.it.53977:22255 1/2/2PTR208-87-35-103.securehost.com。(154)
つまり、Java(またはマシン上の他の何か)は、Googleのサーバーではなく、システムサーバーに対してwww.uffa.comのアドレスの逆引き参照を実行しています。URL.openConnection()。getContent()を使用しても同じことが起こります。
BTraceを使用してInetAddress/Addressコードを計測し、DNSの逆引き参照を暗示する可能性のある呼び出しは実行されません。
率直に言って、私たちは何を探すべきかさえ知りません。
私たちの大きな問題は、高性能のクローラーを作成していることです。DNSルックアップのペースを慎重に調整しようとしていますが、この逆引きルックアップはソケットが開いたときに実行されるため、クロール中に実行されるため、ペースを調整することはできません。数が数千のスレッド。
追加情報として、wgetはDNSの逆引き参照も実行しますが、ポート80のnc(もちろん何も提供しません)は実行しません。
いつものように、どんな助けでも大歓迎です。