brpc icon indicating copy to clipboard operation
brpc copied to clipboard

连接处于CLOSE_WAIT状态导致健康检查失败

Open icexin opened this issue 1 year ago • 7 comments

Describe the bug (描述bug) 服务端的一次宕机后,客户端就一直因为检查检查失败导致rpc失败,报错 [E112]Fail to select server from xxx。在出问题的机器上可以看到连接处于CLOSE_WAIT状态。

Versions (各种版本) OS: ubuntu 20.04 Compiler: clang-8 brpc: 1.8.0 protobuf: 3.15.8

Additional context/screenshots (更多上下文/截图)

image image

icexin avatar Jun 12 '24 08:06 icexin

有这个日志吗? https://github.com/apache/brpc/blob/2e183187bcbccc39c7da8dde2a98d02a7a031279/src/brpc/socket.cpp#L2564-L2567

chenBright avatar Jun 17 '24 14:06 chenBright

CLOSE_WAIT状态持续很久吗?

chenBright avatar Jun 17 '24 14:06 chenBright

对,在我们手动重启之前一直是CLOSE_WAIT状态

icexin avatar Jun 18 '24 01:06 icexin

看着像是是还有rpc没有结束。框架内部要等到连接上全部rpc结束了,才会close fd,然后进行健康检查。

chenBright avatar Jun 18 '24 02:06 chenBright

另外,服务端没起来,健康检查也不会成功吧。

chenBright avatar Jun 18 '24 02:06 chenBright

这边是客户端处于close_wait状态,我们用的是同步rpc,应该rpc很快就处理完了。服务端后来起来后,客户端也因为这个状态一直健康检查失败

icexin avatar Jun 18 '24 11:06 icexin

如果长时间处于CLOSE_WAIT状态,应该是某处持有了socket的引用,导致一直没有close fd和健康检查。

chenBright avatar Jun 19 '24 07:06 chenBright

问下 最后有解决吗?

GITWHB avatar Oct 18 '24 03:10 GITWHB