ローカルにドメイン「engine02.prod.qc.offercal.com」がありますbind9
。
DNSサーバーやTTLの問題ではないと思います。ベンチマークはほとんどの場合次のようになっているからです(各方法を使用して2分間試しました):
curl -o /dev/null http://engine02.prod.qc.offercal.com:49157/void
time_namelookup: 0.150
time_connect: 0.151
time_starttransfer: 0.152
----------
time_total: 0.152
curl -o /dev/null http://192.168.100.10:49157/void # use IP directly
time_namelookup: 0.000
time_connect: 0.002
time_starttransfer: 0.003
----------
time_total: 0.003
time Dig @192.168.100.4 engine02.prod.qc.offercal.com
real 0m0.009s
user 0m0.004s
sys 0m0.004s
time Host engine02.prod.qc.offercal.com
engine02.prod.qc.offercal.com has address 192.168.100.10
real 0m0.011s
user 0m0.006s
sys 0m0.004s
僕の resolv.conf
ファイル:
[root@gateway01 ~]# cat /etc/resolv.conf
nameserver 192.168.100.4
私はしばらくの間この問題に苦しんでいます、助けてください:D
最近、updown.ioをビルドしているときにこの問題が発生し、少し調査しました(strace
コマンドを@Danに感謝します)。これが私が見つけたものです:
私の場合、カールの解決に65ミリ秒かかることもあれば、5ミリ秒未満になることもありました。短時間の非アクティブ状態(数分)後は65ミリ秒かかり、繰り返し呼び出した後は5ミリ秒未満であるように見えました。間違いなくキャッシュのように聞こえ、TTL問題は明らかです。しかし、私のレコードには86400s TTL(1day)があり、ローカルリゾルバーとDigに常にキャッシュされています。 1msかかりました。
そこで、strace
でcurlを実行して、時間が費やされた場所を確認しました。これが私が見つけたものです(わかりやすくするために詳細をいくつか削除しました)。
05:57:52.303 connect(3) = 0
05:57:52.303 sendmmsg(3, ["1\26\1\0\0\1\0\0\0\0\0\0\22jarthon-architecte\3"..., "\0253\1\0\0\1\0\0\0\0\0\0\22jarthon-architecte\3"...] , 2) = 2
05:57:52.303 poll([{fd=3, events=POLLIN}], 1, 5000) = 1
05:57:52.303 ioctl(3, FIONREAD, [56]) = 0
05:57:52.303 recvfrom(3, "1\26\201\200\0\1\0\1\0\0\0\0\22jarthon-architecte\3"...) = 56
05:57:52.304 poll([{fd=3, events=POLLIN}], 1, 4999) = 1
05:57:52.373 ioctl(3, FIONREAD, [96]) = 0
05:57:52.373 recvfrom(3, "\0253\201\200\0\1\0\0\0\1\0\0\22jarthon-architecte\3"...) = 96
05:57:52.373 close(3) = 0
これはDNS解決の部分です。ここではっきりとわかるのは、2つのメッセージが送信され、1つの応答が非常に迅速に受信され、もう1つが69ミリ秒の遅延後に受信されることです。この2番目の応答はおそらくIPv6クエリ(AAAA)だと思ったので、Digで試してみました。
$ Dig AAAA jarthon-architecte.com
;; AUTHORITY SECTION:
jarthon-architecte.com. 180 IN SOA ns0.dnsmadeeasy.com. dns.dnsmadeeasy.com. 2008010120 43200 3600 1209600 180
;; Query time: 86 msec
;; SERVER: ::1#53(::1)
明らかに答えはありませんが、このSOAレコードのTTLは180秒です。これは私のカールテストで5ミリ秒から65ミリ秒にかかった時間と非常によく似ています。
SOAレコードは、応答がない場合にDNSサーバーによって返され、特に負のTTL(180を表示できる行の最後の番号)が含まれます)これは、リゾルバーが否定応答(レコードの不在)をキャッシュできる時間です。つまり、AAAAレコードを照会するときは、DNSサーバーに少なくとも3分ごとにアクセスして、まだそこにないことを確認する必要があります。 。
IPv6を追加する☺
DNSを管理している場合、最も簡単な修正はこの値を増やすことです。私の場合、DNSMadeEasyを使用しているので、カスタムSOAレコードをより高いTTL値を設定し、ドメインに割り当てます: http://help.dnsmadeeasy.com/managed-dns/records/soa-start-authority-record/ 。これにより、カールの解決が速くなります。ほとんどの場合、適切にキャッシュされたAレコードのパフォーマンスのレベルに戻ります。
あなたがカールを作っているがDNSを管理していない場合は、実際の値などをフェッチしながら古い否定的な応答を提供することで、DNSリゾルバーレベルでこれを最適化する方法がおそらくありますが、私は見ていませんまだそれに。
IPv6を気にしない場合は、curl
コマンドラインフラグ-4
を使用して無効にすることもできます。
これがdebianの新しいバージョン(つまりubuntu 13+)である場合は、静的IP構成の後にdns-nameserversを/ etc/network/interfacesの最後に追加する必要があります。 resolv.confを編集すると、これらの種類のLinuxにのみ悲しみが生じます。
すなわち。
ゲートウェイラインの後
dns-nameservers local.dns.ip.hereoutside.back.ip.here