Verzögerungen beim Zugriff auf eine Java WebApp


Beim Zugriff auf eine Java WebApp gibt es immer wieder 5 Sek Verzögerungen bis der HTTP request beantwortet wird und bei einem SSH Login dauert es auch 5 Sek bis man sich auf der Kiste angemeldet hat.

Erste Tests zeigen das das nur bei Maschinen passiert die keinen Reverse DNS Eintrag haben, aber warum sollte das ein Problem sein? Der DNS läuft nicht in einem Timeout sondern meldet sofort ein NXDOMAIN zurück.

Ein Debugging mit ssh -vv gibt auch keine weiteren Erkenntnisse erst ein strace -p <sshd-pid> -f führt in die richtige Richtung:

[pid  ] fstat(4, {st_mode=S_IFREG|0644, st_size=10880, ...}) = 0
[pid  ] mmap(NULL, 2106096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7fbd99b6f000
[pid  ] mprotect(0x7fbd99b71000, 2097152, PROT_NONE) = 0
[pid  ] mmap(0x7fbd99d71000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x2000) = 0x7fbd99d71000
[pid  ] close(4)                    = 0
[pid  ] munmap(0x7fbd9d353000, 37724) = 0
[pid  ] socket(PF_FILE, SOCK_STREAM, 0) = 4
[pid  ] fcntl(4, F_GETFD)           = 0
[pid  ] fcntl(4, F_SETFD, FD_CLOEXEC) = 0
[pid  ] connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
[pid  ] fcntl(4, F_GETFL)           = 0x2 (flags O_RDWR)
[pid  ] fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
[pid  ] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbd9d35c000
[pid  ] lseek(4, 0, SEEK_CUR)       = -1 ESPIPE (Illegal seek)
[pid  ] write(4, "RESOLVE-ADDRESS 192.168.1.33\n", 29) = 29
[pid  ] read(4, ^C <unfinished ...>

Ups was macht denn der avahi Daemon hier? auf einem Produktionssystem in einem Netz mit einem eigenen DNS Server sollte man den ja nicht brauchen.

Ein Blick in die /etc/nsswitch.conf zeigt dann was da abläuft, es wird neben der /etc/hosts und dns auch noch Multicast DNS befragt und Multicast DNS verzögert dann den Zugriff.

[..]
hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
[..]

Auf der Suche wo man sich den Avahi Daemon eingefangen hat, stösst man schnell auf den Schuldigen:

host:/var/log# aptitude why avahi-daemon
i   cups Recommends avahi-daemon
host:/var/log#

cups wars..

Siehe auch