dnsperf and BIND memory consumption
I noticed some odd behavior with BIND 9.5.0-P2 in regards to memory utilization when being tested using dnsperf. The memory usage just continually climbs and never levels out. I've done this with both queries that require recursion as well as queries with authoritative results. In fact, I can just have a single query for localhost in my dnsperf sample and loop that and I'll still see the memory consumption climb for as long as I leave dnsperf running. I have it up over 3GB now before I stopped:
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
52595 bind 11 44 0 3228M 933M select 1 0:35 0.00% named
I was able to trigger the same thing against BIND 9.4.2 running on Windows. The memory usage just keeps climbing. Can someone explain why this happens, and secondly how to prevent it from happening? Any user with dnsperf could easily exhaust the memory on a server running BIND from what I'm looking at. This just seems too easy to trigger and too big of an oversight for this to be true. I'm hoping I'm just mistaken and am not really understanding what's going on here. If there is a way to prevent this with some options for limiting memory, shouldn't there be sensible defaults in place if none are specified? I know I've caused Windows to massively slow down and start swapping by doing this. And what is the point of using all of that memory anyway? If I just keep doing a query for localhost which is an authoritative answer, what information could named possibly be continuously using memory for?
I'm curious what will happen if I just leave dnsperf running unchecked and watch the server. The one I'm testing is not in production so it doesn't matter. I'm just curious.
Also, one side note: I noticed that my test data with recursive data yields about 15k queries per second on this machine whereas my authoritative localhost queries only clock in around 4k on the same box and version of BIND. Why is that?
I should mention that the memory never gets out of control under normal usage as a caching name server doing several hundred recursive queries per second. I've only noticed it with dnsperf... unless it is just accelerating a problem that is there under normal load as well.
Thanks for any pointers...