kitex
kitex copied to clipboard
NETPOLL: readall(fd=xxx) before close: EOF
Describe the bug
QPS2000左右的测试环境下,Kitex服务端偶尔会出现这个报错,大概一天不超过10次。
To Reproduce
偶尔可发现这个报错,手动无法复现
server端配置:
server.WithServiceAddr(
&net.TCPAddr{
IP: 127.0.0.1,
Port: xxxx,
},
),
server.WithServerBasicInfo(
&rpcinfo.EndpointBasicInfo{
ServiceName: xxxxx,
},
),
client配置:(长连接)
client.WithResolver(
resolver.NewNacosResolver(
cli,
),
),
client.WithTransportProtocol(transport.TTHeader),
client.WithMetaHandler(transmeta.ClientTTHeaderHandler),
client.WithLongConnection(
connpool.IdleConfig{
MaxIdlePerAddress: 50,
MaxIdleGlobal: 500,
MaxIdleTimeout: 2 * time.Minute,
MinIdlePerAddress: 2,
},
),
仅上线服务端后即有这个错误,也就是在没有client请求的情况下就会出现这个日志
Screenshots
2023/05/24 00:41:28 NETPOLL: readall(fd=182) before close: EOF 2023/05/24 00:08:59 NETPOLL: readall(fd=112) before close: EOF 2023/05/23 22:10:07 NETPOLL: readall(fd=205) before close: EOF 2023/05/23 20:10:06 NETPOLL: readall(fd=135) before close: EOF 2023/05/23 17:38:03 NETPOLL: readall(fd=140) before close: EOF 2023/05/23 17:10:07 NETPOLL: readall(fd=245) before close: EOF 2023/05/23 10:28:53 NETPOLL: readall(fd=201) before close: EOF
Kitex version:
v0.6.0
Environment:
golang:v1.18-alpine
这个报错实际上是在对端关闭连接时,读取未读完的缓冲区数据到input buffer,避免send&close的情况下,无法处理请求。 如果是没有客户端请求的时候就有这个报错,可以看下对应连接是由哪个来源方建立的,一般是这个来源方发送的数据包同时关闭连接导致这个错误。
感谢您的解答! 这个错误的NETPOLL库的源码大概看了一下,我明白你的意思。 可是在没有客户端的请求的情况下为什么会发送数据包呢? 还有一种情况是当请求大量超时的时候,例如在1点的时候有七百个请求超时,然后在1点10会报大概三百个这样的错误,正好和服务端的默认配置(WithMaxConnIdleTime)10分钟吻合? 错误理解,只是不理解为什么会有这个错误,以及应该怎么修改才能避免这个错误,或者说这个错误实际上影响也不大?
最好还是抓包看看,主要是看对应连接是跟哪个来源方建立的,从上面的表述看,没有发现明确的可疑点。
我们也遇到这个问题。。。
是不是需要加个lianjie1池监控
之前有遇到这个问题吗?或者你们提供一个最小可复现的代码?
看起来是网络问题,使用耗时长的http连接也会复现
这个日志本身也没必要打的,不算是错误
如果还遇到类似的问题,请在 Netpoll 仓库提交 issue