工場長のブログ

日々思ったことを書いてます。

LLでのDNSルックアップはどこかにキャッシュされるのか。

rubypythonphpperlで試してみた。
それぞれの言語ごとに下記のコードを動かしながら、

tcpdump dst port 53

でチェックしてみた。結果としてはすべての言語においてDNSレコードはキャッシュされることなく毎回DNSルックアップしてた。JavaだとVM上にDNSレコードがキャッシュされるらしい。

LLだと毎回DNSルックアップされるということがわかったので、通信処理のオーバーヘッドが気になる時、もしくは気にしなきゃいけないくらいの頻度で通信するようなアプリケーションを使うならhostsに書くなどがよさげ。

逆にDNSを使った負荷分散の時は、このへん特にケアしなくて良い感じですね。

  • php
<?php
require("HTTP/Request.php");

$args = $_SERVER["argv"];
$url  = $args[1];

$http = new HTTP_Request($url);

$count = 0;
for(;;){
    $response = $http->sendRequest();
    print $count++ . "\n";
    sleep(5);
}
#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;

my $ua = LWP::UserAgent->new();

my $count = 0;
while(1){
    $ua->get($ARGV[0]);
    print $count++ . "\n";
    sleep(5);
}
from urllib import urlopen
import sys
import time

argvs = sys.argv
count = 0

while True:
    urlopen(argvs[1])
    count += 1
    print count
    time.sleep(5)
require 'net/http'
require 'uri'

url = URI.parse(ARGV[0])

count = 0
while 1 > 0
    Net::HTTP.start(url.host, url.port){|http|
        http.get('/')
    }
    sleep 5
end