Mam mały program Java, który co sekundę zapętla wywołanie InetAddress.getByName („example.com”). Kiedy uruchamiam go na polu CentOS 6.4 za pomocą 'strace -f', widzę, że /etc/resolv.conf jest otwarty i czytam raz:
$ grep /etc/resolv.conf strace.out
[pid 24810] open("/etc/resolv.conf", O_RDONLY) = 6
Kiedy uruchamiam go na Debianie 7, widzę, że plik /etc/resolv.conf jest wielokrotnie otwierany lub stat () 'd:
$ grep /etc/resolv.conf strace.out
[pid 41821] open("/etc/resolv.conf", O_RDONLY) = 10
[pid 41821] stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=92, ...}) = 0
[pid 41821] open("/etc/resolv.conf", O_RDONLY) = 10
[pid 41821] stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=92, ...}) = 0
[pid 41821] stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=92, ...}) = 0
Oba systemy mają skonfigurowane /etc/nsswitch.conf
hosts: pliki dns
Żaden system nie ma uruchomionego demona buforowania nazw.
Użyłem tej samej wersji JVM Oracle HotSot Java na obu komputerach, aby wykluczyć wszelkie różnice w Javie.
W pudełku CentOS 6.4 zainstalowano glibc 2.12. Debian 7 ma zainstalowany glibc 2.13.
Co tłumaczy odmienne zachowanie obu systemów operacyjnych w odniesieniu do otwierania i czytania /etc/resolv.conf?