DNS weirdness
Das war doch mal wieder eine lustige Fehlersuche. Begonnen hat alles mit unerklärbaren Zeitsprüngen bei Lasttests auf meinen apache Webserver: Wenn ich ein "siege" auf eine meiner Seiten abgefeuert habe um Performance Optimierungen zu testen, hatte ich immer mal einzelne Anfragen, die von ein paar Millisekunden Anwortzeit auf 5 Sekunden (5 seconds) plus ein paar Millisekunden hochgesprungen sind. Der Effekt war nicht deterministisch, trat manchmal bei ein paar Requests hintereinander auf, dann aber auch mal ein paar hundert Requests lang gar nicht.
Also macht Admin sich an die Fehlersuche, wie das wohl entstehen könnte. Zunächst habe ich diverse Parameter in meinem fcgi Environment durchprobiert, bis sich herausstellte, dass der Effekt auch auftritt, wenn statische Dateien abgerufen werden, fcgi damit also nix zu tun hat. Also apache zerlegen, mal ein anderes mpm modul ausprobieren ... auch kein Erfolg.
Einige google Quälereien (ohne Erfolg) später hab ich dann mal in einem siege für die zu testende Adresse eine IP-Adresse statt eines Domain Names eingetragen. Siehe da, der Delay trat nicht mehr auf.
Folglich war ich bei einem grundlegenden DNS-Problem meiner Maschine gelandet. Da ich siege immer lokal laufen lasse um Netzwerklatenzen zu vermeiden, habe ich in /etc/resolv.conf mal nach Parametern gesucht, die einen Timeout begrenzen:
options timeout:1
Erfolg: Mein Delay hat sich auf 1 Sekunde verkürzt. Stellt sich also heraus: Von den in der resolv.conf eingetragenen Nameservern antwortet mindestens einer nicht immer auf Anfragen. Die lokale Namensauflösung läuft deshalb per default nach 5 Sekunden in einen Timeout, stellt die Anfrrage erneut, erhält dann meist eine Antwort, und ist glücklich.
Fazit: Die oben genannte Option kann ich jedem Anwender als Eintrag in der resolv.conf empfehlen, wenn ein upstream Nameserver aus irgendwelchen Gründen einfach mal die Antwort verschlampt. So verkürzen sich die Wartezeiten wenigstens ;) Vielleicht würde ein lokaler Name Service Caching Daemon das Problem ebenfalls meistens unterdrücken.