[GH-ISSUE #397] Performance Improvements #139

Closed
opened 2026-02-26 04:34:10 +03:00 by kerem · 1 comment
Owner

Originally created by @mageddo on GitHub (Mar 23, 2023).
Original GitHub issue: https://github.com/mageddo/dns-proxy-server/issues/397

Pre-load docker containers hostnames

Noticed 50% of the query time is spent by trying to solve docker containers, the process to check if any container matches to a given hostname is composed of many steps,

It would be faster if DPS watch for docker container events instead of query docker hostnames using the docker api for every dns query.

Logs

23:21:59.466 [Thread-14      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=45   m=solve                           status=solveReq, kind=udp, query=query=A:uol.com.br
23:21:59.490 [Thread-14      ] DEB c.m.d.server.dns.solver.SolverCachedRemote        l=32   m=lambda$handle$0                 status=remoteHotLoading, query=query=A:uol.com.br
23:21:59.509 [Thread-14      ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache  l=46   m=lambda$handleRes$0              status=hotload, k=A-uol.com.br, ttl=PT5M, simpleMsg=query=A:uol.com.br
23:21:59.509 [Thread-14      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=84   m=solve0                          status=solved, currentSolverTime=20, totalTime=43, solver=SolverCachedRemote, req=query=A:uol.com.br, res=rc=0, res=uol.com.br.    43  IN  A  200.147.35.149
23:21:59.509 [Thread-14      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=99   m=solve0                          status=solveSummary, summary=[(SolverSystem,0), (SolverDocker,22), (SolverLocalDB,1), (SolverCachedRemote,20)]
23:21:59.509 [Thread-14      ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache  l=46   m=lambda$handleRes$0              status=hotload, k=A-uol.com.br, ttl=PT20S, simpleMsg=query=A:uol.com.br
23:21:59.509 [Thread-14      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=50   m=solve                           status=solveRes, kind=udp, time=43, res=rc=0, res=uol.com.br.    43  IN  A  200.147.35.149, req=query=A:uol.com.br
23:21:59.510 [Thread-14      ] DEB com.mageddo.dnsproxyserver.server.dns.UDPServer   l=58   m=handle                          status=success, query=query=A:uol.com.br, res=rc=0, res=uol.com.br.    43  IN  A  200.147.35.149, serverAddr=/0:0:0:0:0:0:0:0, clientAddr=/192.168.0.128:39531, dataLength=512, datagramLength=28
23:21:59.510 [Thread-15      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=45   m=solve                           status=solveReq, kind=udp, query=query=AAAA:uol.com.br
23:21:59.523 [Thread-15      ] DEB c.m.d.server.dns.solver.SolverCachedRemote        l=32   m=lambda$handle$0                 status=remoteHotLoading, query=query=AAAA:uol.com.br
23:21:59.542 [Thread-15      ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache  l=46   m=lambda$handleRes$0              status=hotload, k=AAAA-uol.com.br, ttl=PT5M, simpleMsg=query=AAAA:uol.com.br
23:21:59.542 [Thread-15      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=84   m=solve0                          status=solved, currentSolverTime=19, totalTime=31, solver=SolverCachedRemote, req=query=AAAA:uol.com.br, res=rc=0, res=uol.com.br.    9  IN  AAAA  2804:49c:3102:401:ffff:ffff:ffff:36
23:21:59.542 [Thread-15      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=99   m=solve0                          status=solveSummary, summary=[(SolverSystem,0), (SolverDocker,11), (SolverLocalDB,1), (SolverCachedRemote,19)]
23:21:59.542 [Thread-15      ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache  l=46   m=lambda$handleRes$0              status=hotload, k=AAAA-uol.com.br, ttl=PT20S, simpleMsg=query=AAAA:uol.com.br
23:21:59.542 [Thread-15      ] DEB c.m.d.server.dns.RequestHandlerDefault            l=50   m=solve                           status=solveRes, kind=udp, time=32, res=rc=0, res=uol.com.br.    9  IN  AAAA  2804:49c:3102:401:ffff:ffff:ffff:36, req=query=AAAA:uol.com.br
23:21:59.543 [Thread-15      ] DEB com.mageddo.dnsproxyserver.server.dns.UDPServer   l=58   m=handle                          status=success, query=query=AAAA:uol.com.br, res=rc=0, res=uol.com.br.    9  IN  AAAA  2804:49c:3102:401:ffff:ffff:ffff:36, serverAddr=/0:0:0:0:0:0:0:0, clientAddr=/192.168.0.128:49244, dataLength=512, datagramLength=28

Caches the LocalDB

Caches the localdb and store it in a model of key value, will also help to increase performance and reduce disk load usage.

References to watch file changes so the cache can be automatically updated

Originally created by @mageddo on GitHub (Mar 23, 2023). Original GitHub issue: https://github.com/mageddo/dns-proxy-server/issues/397 ### Pre-load docker containers hostnames Noticed 50% of the query time is spent by trying to solve docker containers, the process to check if any container matches to a given hostname is composed of many steps, It would be faster if DPS watch for docker container events instead of query docker hostnames using the docker api for every dns query. Logs ``` 23:21:59.466 [Thread-14 ] DEB c.m.d.server.dns.RequestHandlerDefault l=45 m=solve status=solveReq, kind=udp, query=query=A:uol.com.br 23:21:59.490 [Thread-14 ] DEB c.m.d.server.dns.solver.SolverCachedRemote l=32 m=lambda$handle$0 status=remoteHotLoading, query=query=A:uol.com.br 23:21:59.509 [Thread-14 ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache l=46 m=lambda$handleRes$0 status=hotload, k=A-uol.com.br, ttl=PT5M, simpleMsg=query=A:uol.com.br 23:21:59.509 [Thread-14 ] DEB c.m.d.server.dns.RequestHandlerDefault l=84 m=solve0 status=solved, currentSolverTime=20, totalTime=43, solver=SolverCachedRemote, req=query=A:uol.com.br, res=rc=0, res=uol.com.br. 43 IN A 200.147.35.149 23:21:59.509 [Thread-14 ] DEB c.m.d.server.dns.RequestHandlerDefault l=99 m=solve0 status=solveSummary, summary=[(SolverSystem,0), (SolverDocker,22), (SolverLocalDB,1), (SolverCachedRemote,20)] 23:21:59.509 [Thread-14 ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache l=46 m=lambda$handleRes$0 status=hotload, k=A-uol.com.br, ttl=PT20S, simpleMsg=query=A:uol.com.br 23:21:59.509 [Thread-14 ] DEB c.m.d.server.dns.RequestHandlerDefault l=50 m=solve status=solveRes, kind=udp, time=43, res=rc=0, res=uol.com.br. 43 IN A 200.147.35.149, req=query=A:uol.com.br 23:21:59.510 [Thread-14 ] DEB com.mageddo.dnsproxyserver.server.dns.UDPServer l=58 m=handle status=success, query=query=A:uol.com.br, res=rc=0, res=uol.com.br. 43 IN A 200.147.35.149, serverAddr=/0:0:0:0:0:0:0:0, clientAddr=/192.168.0.128:39531, dataLength=512, datagramLength=28 23:21:59.510 [Thread-15 ] DEB c.m.d.server.dns.RequestHandlerDefault l=45 m=solve status=solveReq, kind=udp, query=query=AAAA:uol.com.br 23:21:59.523 [Thread-15 ] DEB c.m.d.server.dns.solver.SolverCachedRemote l=32 m=lambda$handle$0 status=remoteHotLoading, query=query=AAAA:uol.com.br 23:21:59.542 [Thread-15 ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache l=46 m=lambda$handleRes$0 status=hotload, k=AAAA-uol.com.br, ttl=PT5M, simpleMsg=query=AAAA:uol.com.br 23:21:59.542 [Thread-15 ] DEB c.m.d.server.dns.RequestHandlerDefault l=84 m=solve0 status=solved, currentSolverTime=19, totalTime=31, solver=SolverCachedRemote, req=query=AAAA:uol.com.br, res=rc=0, res=uol.com.br. 9 IN AAAA 2804:49c:3102:401:ffff:ffff:ffff:36 23:21:59.542 [Thread-15 ] DEB c.m.d.server.dns.RequestHandlerDefault l=99 m=solve0 status=solveSummary, summary=[(SolverSystem,0), (SolverDocker,11), (SolverLocalDB,1), (SolverCachedRemote,19)] 23:21:59.542 [Thread-15 ] DEB c.m.dnsproxyserver.server.dns.solver.SolverCache l=46 m=lambda$handleRes$0 status=hotload, k=AAAA-uol.com.br, ttl=PT20S, simpleMsg=query=AAAA:uol.com.br 23:21:59.542 [Thread-15 ] DEB c.m.d.server.dns.RequestHandlerDefault l=50 m=solve status=solveRes, kind=udp, time=32, res=rc=0, res=uol.com.br. 9 IN AAAA 2804:49c:3102:401:ffff:ffff:ffff:36, req=query=AAAA:uol.com.br 23:21:59.543 [Thread-15 ] DEB com.mageddo.dnsproxyserver.server.dns.UDPServer l=58 m=handle status=success, query=query=AAAA:uol.com.br, res=rc=0, res=uol.com.br. 9 IN AAAA 2804:49c:3102:401:ffff:ffff:ffff:36, serverAddr=/0:0:0:0:0:0:0:0, clientAddr=/192.168.0.128:49244, dataLength=512, datagramLength=28 ``` ### Caches the LocalDB Caches the localdb and store it in a model of key value, will also help to increase performance and reduce disk load usage. References to watch file changes so the cache can be automatically updated * https://docs.oracle.com/javase/tutorial/essential/io/notification.html * https://stackoverflow.com/questions/494869/file-changed-listener-in-java
kerem 2026-02-26 04:34:10 +03:00
Author
Owner

@mageddo commented on GitHub (Jan 14, 2026):

These are pretty relevant items for performance improvement, btw, I've made some other improvements like caching and virtual threads, performance is not an issue nowadays.

Closing this issue as it is not priority right now

<!-- gh-comment-id:3750451819 --> @mageddo commented on GitHub (Jan 14, 2026): These are pretty relevant items for performance improvement, btw, I've made some other improvements like caching and virtual threads, performance is not an issue nowadays. Closing this issue as it is not priority right now
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/dns-proxy-server-mageddo#139
No description provided.