Massive DNS queries between PDs
- Dominant language
- Go
- Stars
- 1.2k
- Forks
- 783
- Avg merge
- 5d 21h
- Merged PRs (30d)
- 36
Description
## Enhancement Task
Over the course of about an hour, the PD generated 10,000 DNS logs.
The DNS logs show that most queries are directed at PD itself.
[bt.zip](https://github.com/user-attachments/files/24118863/bt.zip)
It is found from dlv that grpc balancer frequently calls DNS, usually because the connection becomes idle. It is not found that PD itself frequently calls DNS.
```
0 0x00000000013afe96 in net.(*Resolver).lookupIPAddr
at /usr/local./src/net/lookup.go:304
r = (*net.Resolver)(0x4c04bc0)
ctx = context.Context(*context.valueCtx) 0xbeef000000000108
network = "tcp"
host = "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424"
~r0 = (unreadable empty OP stack)
~r1 = (unreadable empty OP stack)
.autotmp_101 = context.backgroundCtx {emptyCtx: context.emptyCtx {}}
~r0.ptr = (unreadable empty OP stack)
~r0.cap = (unreadable empty OP stack)
1 0x00000000013ade05 in net.(*Resolver).internetAddrList
at /usr/local./src/net/ipsock.go:289
r = (unreadable could not find loclist entry at 0x7f6614 for address 0x13ade05)
ctx = (unreadable could not find loclist entry at 0x7f6680 for address 0x13ade05)
net = "tcp"
addr = (unreadable could not find loclist entry at 0x7f679c for address 0x13ade05)
~r0 = (unreadable empty OP stack)
~r1 = (unreadable empty OP stack)
err = (unreadable could not read 8 bytes from register 5 (size: 0))
host = "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424"
port = (unreadable could not find loclist entry at 0x7f6b93 for address 0x13ade05)
portnum = (unreadable could not find loclist entry at 0x7f67eb for address 0x13ade05)
inetaddr = (unreadable empty OP stack)
~r0.data = (unreadable empty OP stack)
~r0.itab = (unreadable empty OP stack)
2 0x0000000001395d25 in net.(*Resolver).resolveAddrList
at /usr/local./src/net/dial.go:302
r = (*net.Resolver)(0x4c04bc0)
ctx = context.Context(*context.valueCtx) 0xbeef000000000608
op = "dial"
network = (unreadable could not find loclist entry at 0x7d8ed8 for address 0x1395d25)
addr = "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379"
hint = net.Addr nil
~r0 = (unreadable empty OP stack)
~r1 = (unreadable empty OP stack)
~r0.ptr = (unreadable empty OP stack)
~r0.len = (unreadable empty OP stack)
afnet = (unreadable could not find loclist entry at 0x7d9135 for address 0x1395d25)
err = (unreadable could not read 8 bytes from register 5 (size: 0))
3 0x0000000001396cc5 in net.(*Dialer).DialContext
at /usr/local./src/net/dial.go:509
d = (*net.Dialer)(0xc00295d070)
ctx = context.Context(*context.valueCtx) 0xbeef000000000a08
network = "tcp"
address = "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379"
~r0 = (unreadable empty OP stack)
~r0 = (unreadable empty OP stack)
~r1 = (unreadable empty OP stack)
~r1 = (unreadable empty OP stack)
resolveCtx = context.Context(*context.valueCtx) 0xbeef000000000a08
4 0x000000000162ba7a in google.golang.org/grpc/internal/transport.proxyDial
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/internal/transport/proxy.go:127
ctx = context.Context(*context.valueCtx) 0xbeef000000000d08
addr = "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379"
grpcUA = "grpc-go/1.62.1"
~r0 = (unreadable empty OP stack)
~r1 = (unreadable empty OP stack)
newAddr = "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379"
proxyURL = *net/url.URL nil
err = (unreadable could not read 8 bytes from register 2 (size: 0))
5 0x0000000001610956 in google.golang.org/grpc/internal/transport.dial
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/internal/transport/http2_client.go:180
ctx = context.Context(*context.valueCtx) 0xbeef000000001008
fn = nil
addr = google.golang.org/grpc/resolver.Address {Addr: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391
424:2379", ServerName: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379", Attributes: *google.golang.o
rg/grpc/attributes.Attributes nil,...+2 more}
useProxy = true
grpcUA = "grpc-go/1.62.1"
~r0 = (unreadable empty OP stack)
~r1 = (unreadable empty OP stack)
address = (unreadable could not find loclist entry at 0xad0da4 for address 0x1610956)
networkType = (unreadable could not find loclist entry at 0xad0e85 for address 0x1610956)
6 0x0000000001610d27 in google.golang.org/grpc/internal/transport.newHTTP2Client
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/internal/transport/http2_client.go:219
connectCtx = context.Context(*context.valueCtx) 0xbeef000000001208
ctx = context.Context(*context.cancelCtx) 0xbeef000000001308
addr = google.golang.org/grpc/resolver.Address {Addr: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391
424:2379", ServerName: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379", Attributes: *google.golang.o
rg/grpc/attributes.Attributes nil,...+2 more}
opts = google.golang.org/grpc/internal/transport.ConnectOptions {UserAgent: "grpc-go/1.62.1", Dialer: nil, F
ailOnNonTempDialError: false,...+13 more}
onClose = google.golang.org/grpc.(*addrConn).createTransport.func1
~r0 = (unreadable empty OP stack)
~r0 = (unreadable empty OP stack)
err = error nil
~r0.ptr = (unreadable empty OP stack)
~r0.len = (unreadable empty OP stack)
.autotmp_157 = google.golang.org/grpc/peer.peerKey {}
~r0.data = (unreadable empty OP stack)
~r0.itab = (unreadable empty OP stack)
.autotmp_135 = google.golang.org/grpc/internal/credentials.clientHandshakeInfoKey {}
scheme = (unreadable could not find loclist entry at 0xad1ae3 for address 0x1610d27)
cancel = context.WithCancel.func1
7 0x0000000001696fe5 in google.golang.org/grpc/internal/transport.NewClientTransport
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/internal/transport/transport.go:620
connectCtx = (unreadable could not find loclist entry at 0xb5c387 for address 0x1696fe5)
ctx = (unreadable could not find loclist entry at 0xb5c3d6 for address 0x1696fe5)
addr = google.golang.org/grpc/resolver.Address {Addr: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391
424:2379", ServerName: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379", Attributes: *google.golang.o
rg/grpc/attributes.Attributes nil,...+2 more}
opts = google.golang.org/grpc/internal/transport.ConnectOptions {UserAgent: "grpc-go/1.62.1", Dialer: nil, F
ailOnNonTempDialError: false,...+13 more}
onClose = google.golang.org/grpc.(*addrConn).createTransport.func1
8 0x0000000001696fe5 in google.golang.org/grpc.(*addrConn).createTransport
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/clientconn.go:1393
ac = ("*google.golang.org/grpc.addrConn")(0xc001993808)
ctx = context.Context(*context.cancelCtx) 0xbeef000000001408
addr = google.golang.org/grpc/resolver.Address {Addr: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391
424:2379", ServerName: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379", Attributes: *google.golang.o
rg/grpc/attributes.Attributes nil,...+2 more}
copts = google.golang.org/grpc/internal/transport.ConnectOptions {UserAgent: "grpc-go/1.62.1", Dialer: nil,
FailOnNonTempDialError: false,...+13 more}
connectDeadline = time.Time(2025-12-11T08:21:27Z, +13595338482369){wall: 13999084994778627487, ext: 13595338
482369, loc: (*time.Location)(0x4c06300)}
~r0 = (unreadable empty OP stack)
~r0 = (unreadable empty OP stack)
~r1.data = (unreadable empty OP stack)
~r1.itab = (unreadable empty OP stack)
hcancel = context.WithCancel.func1
hctx = context.Context(*context.cancelCtx) 0xbeef000000001608
onClose = google.golang.org/grpc.(*addrConn).createTransport.func1
cancel = (unreadable could not find loclist entry at 0xb5c085 for address 0x1696fe5)
connectCtx = (unreadable could not find loclist entry at 0xb5c141 for address 0x1696fe5)
9 0x0000000001696c51 in google.golang.org/grpc.(*addrConn).tryAllAddrs
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/clientconn.go:1340
ac = ("*google.golang.org/grpc.addrConn")(0xc001993808)
ctx = context.Context(*context.cancelCtx) 0xbeef000000001708
addrs = (unreadable could not find loclist entry at 0xb5babe for address 0x1696c51)
connectDeadline = time.Time(2025-12-11T08:21:27Z, +13595338482369){wall: 13999084994778627487, ext: 13595338
482369, loc: (*time.Location)(0x4c06300)}
~r0 = (unreadable empty OP stack)
firstConnErr = error nil
addr = google.golang.org/grpc/resolver.Address {Addr: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391
424:2379", ServerName: "db-b0aa4b39-pd-mxbe95.db-cluster.tidb1998966377020391424:2379", Attributes: *google.golang.o
rg/grpc/attributes.Attributes nil,...+2 more}
copts = google.golang.org/grpc/internal/transport.ConnectOptions {UserAgent: "grpc-go/1.62.1", Dialer: nil,
FailOnNonTempDialError: false,...+13 more}
10 0x00000000016964ef in google.golang.org/grpc.(*addrConn).resetTransport
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/clientconn.go:1275
ac = ("*google.golang.org/grpc.addrConn")(0xc001993808)
acCtx = context.Context(*context.cancelCtx) 0xbeef000000001a08
addrs = []google.golang.org/grpc/resolver.Address len: 1, cap: 1, [...]
backoffFor = 3343727740
dialDuration = github.com/tikv/pd/pkg/utils/testutil.defaultWaitFor (20000000000)
11 0x0000000001694699 in google.golang.org/grpc.(*addrConn).connect
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/clientconn.go:930
ac = ("*google.golang.org/grpc.addrConn")(0xc001993808)
~r0 = (unreadable empty OP stack)
12 0x000000000168f565 in google.golang.org/grpc.(*acBalancerWrapper).Connect.gowrap1
at /root./pkg/mod/google.golang.org/grpc@v1.62.1/balancer_wrapper.go:315
13 0x00000000011005a1 in runtime.goexit
at /usr/local./src/runtime/asm_amd64.s:1700
```
Contributor guide
Assessment
This issue has not been assessed yet.