【问题标题】:grpc connection management have mismatched number of connectionsgrpc 连接管理的连接数不匹配
【发布时间】:2020-01-23 17:38:54
【问题描述】:

我们有一个基于 C++ 双向 grpc 客户端/服务器的项目。客户端只与服务器建立一个连接。服务器将有多个客户端。 通过“netstat”命令,服务器端显示来自同一个客户端的多个已建立连接,但客户端此时只有一个与该服务器的活动连接。

以下是一个例子:

在服务器端:

netstat -an|grep "port"|grep "clientip"

tcp6 0 0 serverip:port clientip:61501 ESTABLISHED

tcp6 0 0 serverip:port clientip:60241 ESTABLISHED

tcp6 0 0 serverip:port clientip:54173 ESTABLISHED

tcp6 0 0 serverip:port clientip:48677 ESTABLISHED

tcp6 0 0 serverip:port clientip:53149 ESTABLISHED

在客户端时:

netstat -an|grep "serverip"

tcp6 0 0 clientip:53149 serverip:port ESTABLISHED

这似乎是服务器端无法删除过时的连接。 这样做的后果是服务器可能超过最大连接限制,这将导致其他问题。

有人看到同样的症状吗?在grpc连接管理方面有什么建议吗?

【问题讨论】:

    标签: grpc


    【解决方案1】:

    您可以尝试在您的连接上启用 keepalives 吗?

    【讨论】:

    • 谢谢。我们之前尝试过,但没有帮助。现在我们正在查看应用程序级别的关闭客户端代码。如果有连接错误,应用程序级别会关闭客户端。一种假设是,当多个线程在发生连接错误(到同一服务器)时不断关闭客户端通道时,可能会导致所有客户端连接处于无法及时确认的状态。我们上周推出了修复程序。如果证明这一点,将更新此线程。谢谢!
    猜你喜欢
    • 2021-12-05
    • 2020-10-15
    • 1970-01-01
    • 2020-05-24
    • 2018-11-26
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多