Periodic OOM: Technitium DNS Server dotnet process grows to ~5.1 GB RSS and is killed by Linux
Hello,
I am experiencing a recurring out-of-memory (OOM) problem with Technitium DNS Server.
Environment:
- Technitium DNS Server: 15.4
- The same problem also occurred previously on version 14.6
- Linux VM
- Two DNS servers with the same/similar configuration
- No swap configured
The problem is periodic. The Technitium dotnet process starts normally with approximately 500-600 MB RSS, but after some time its resident memory usage increases significantly. Eventually, the Linux kernel runs out of available memory and kills the Technitium dotnet process.
I do not see a significant increase in DNS query traffic before the OOM events.
The same behavior has occurred on both DNS servers.
For example, on DNS1, the latest OOM event occurred at 21:51:27:
.NET Sockets invoked oom-killer
oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/dns.service,task=dotnet,pid=7794,uid=0
Out of memory: Killed process 7794 (dotnet) total-vm:18186076kB, anon-rss:5366016kB, file-rss:256kB, shmem-rss:33152kB, UID:0, pgtables:13480kB, oom_score_adj:0
At the time of the OOM:
- dotnet total virtual memory: ~17.3 GiB
- anonymous RSS: ~5.12 GiB
- file RSS: almost zero
- shared memory: ~32 MB
The kernel reports this as a global OOM:
global_oom constraint=CONSTRAINT_NONE
The process was killed by the Linux kernel, and systemd automatically restarted the DNS service.
The restart happened 10 seconds later:
21:51:27 - dotnet process killed 21:51:37 - systemd started the DNS service 21:51:44 - Technitium DNS Server started successfully
After the restart, the new dotnet process was using only about 500 MB RSS.
Current process information shortly after the restart:
VmPeak: 18141068 kB VmSize: 18141036 kB VmRSS: 496652 kB VmData: 1555036 kB VmStk: 132 kB VmExe: 60 kB VmLib: 64824 kB VmPTE: 2000 kB Threads: 141
The corresponding ps output showed:
RSS: ~550 MB VSZ: ~18 GB
Therefore, the virtual memory size (VSZ/VmSize) is approximately 18 GB both shortly after startup and before the OOM. The significant change appears to be the resident memory (RSS), which grows from approximately 500-600 MB to more than 5 GB.
I have observed almost the same memory usage at OOM on both DNS servers:
DNS1: anon-rss: ~5.15 GB
DNS2: anon-rss: ~5.14 GB
DNS1 again: anon-rss: ~5.12 GB
This is a recurring pattern rather than a single isolated event.
I also want to clarify that this does not appear to be specific to Technitium DNS Server 15.4. I previously experienced the same behavior on version 14.6.
I have also not observed a significant increase in DNS query volume before the OOM events.
The server does not have swap configured.
Could this be related to a memory leak or some other type of unbounded memory growth in Technitium DNS Server, for example in the resolver, cache, statistics, DNSSEC processing, networking, or another subsystem?
I would also like to determine whether this memory is being consumed by the .NET managed heap or by native/unmanaged allocations.
What would be the best diagnostics to collect before the next OOM?
Thank you.
Source: TechnitiumSoftware/DnsServer