Problem
Der Windows 2008/2008R2 DNS-Server („dns.exe“) konsumiert ohne Ende Speicher. Der Server startet mit 120Mb, wächst auf über 400Mb und erreicht auch gerne über 1Gb RAM. Das ist für mittlere Netzwerke mit ein paar hundert PCs ein bisschen viel.
Lösung
Standardmäßig öffnet der Windows DNS-Server einen Pool von 5000 UDP sockets (2500 IPv4 und 2500 IPv6). Unter Windows Server 2008 R2 werden für jeden Port ~2.5Kb RAM allokiert, plus zusätzliche ~7.2Kb pro Empfanspuffer fällig – und es wird pro CPU ein Buffer erstellt. Auf Maschinen mit mehreren CPUs läpper sicht das schnell ordentlich zusammen:
(2.5kb x 5000 sockets) + (32 cpus/cores x 5000 sockets x 7.2kb ) = (12500kb) + (1152000kb) = 1164500kb = ~ 1.1GB
Sinnvollerweise verringert man also die Anzahl der Sockets:
dnscmd /Config /SocketPoolSize 100
100 ist ein guter Wert (~250PCs). Die aktuelle Anzahl prüft man mit:
dnscmd /Info /SocketPoolSize