Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NETPOLL: readall(fd=xxx) before close: EOF #1011

Open
zhangzhao219 opened this issue Jul 3, 2023 · 8 comments
Open

NETPOLL: readall(fd=xxx) before close: EOF #1011

zhangzhao219 opened this issue Jul 3, 2023 · 8 comments

Comments

@zhangzhao219
Copy link

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

@jayantxie
Copy link
Member

这个报错实际上是在对端关闭连接时,读取未读完的缓冲区数据到input buffer,避免send&close的情况下,无法处理请求。
如果是没有客户端请求的时候就有这个报错,可以看下对应连接是由哪个来源方建立的,一般是这个来源方发送的数据包同时关闭连接导致这个错误。

@zhangzhao219
Copy link
Author

感谢您的解答!
这个错误的NETPOLL库的源码大概看了一下,我明白你的意思。
可是在没有客户端的请求的情况下为什么会发送数据包呢?
还有一种情况是当请求大量超时的时候,例如在1点的时候有七百个请求超时,然后在1点10会报大概三百个这样的错误,正好和服务端的默认配置(WithMaxConnIdleTime)10分钟吻合?
错误理解,只是不理解为什么会有这个错误,以及应该怎么修改才能避免这个错误,或者说这个错误实际上影响也不大?

@jayantxie
Copy link
Member

最好还是抓包看看,主要是看对应连接是跟哪个来源方建立的,从上面的表述看,没有发现明确的可疑点。

@b675987273
Copy link

我们也遇到这个问题。。。

@b675987273
Copy link

是不是需要加个lianjie1池监控

@jayantxie
Copy link
Member

之前有遇到这个问题吗?或者你们提供一个最小可复现的代码?

@b675987273
Copy link

看起来是网络问题,使用耗时长的http连接也会复现

@jayantxie
Copy link
Member

这个日志本身也没必要打的,不算是错误

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants