1

环境:HDP 2.6.4

安巴里 – 2.6.1

3 动物园管理员服务器

23.1.35.185 - 是第一个zookeeper服务器的IP

大家好,

在第一个 zookeeper 服务器中,似乎即使关闭与 zookeeper 的连接也没有关闭,

这会导致从主机达到最大客户端连接数 - 我们在 zookeeper 配置中将 maxClientCnxns 设置为 60

因此,当一个新应用程序出现并尝试创建连接时,它会失败。

连接时的示例:

echo stat | nc 23.1.35.185 2181 

Latency min/avg/max: 0/71/399

Received: 3031 Sent: 2407

Connections: 67 

Outstanding: 622 

Zxid: 0x130000004d 

Mode: follower 

Node count: 3730

但是一段时间后,当连接达到 ~70 时,我们看到

echo stat | nc 23.1.35.185 2181

Ncat: Connection reset by peer.

我们还可以看到很多 CLOSE_WAIT

java      58936       zookeeper   60u  IPv6 381963738      0t0  TCP Zookeper_server.sys54.com:eforward->zookeper_server.sys54.com:44983 (CLOSE_WAIT)

来自 Zookeeper 日志

2018-12-26 02:50:46,382 [myid:1] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@193]
    - Too many connections from /23.1.35.185 - max is 60

在 ambari 我们也可以看到

Connection failed: [Errno 104] Connection reset by peer to zookeper_server.sys54.com.:2181

我必须说这在 zookeeper 服务器 2 和 3 上没有发生

注意 - 如果我们将maxClientCnxns增加到 300 ,这无济于事,因为一段时间后我们获得了更多的 300 个连接(CLOSE_WAIT),然后我们从日志中看到

2018-12-26 02:50:49,375 [myid:1] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@193] - Too many connections from /23.1.35.187 - max is 300

所以任何提示为什么连接是 CLOSE_WAIT ?

4

1 回答 1

1

CLOSE_WAIT表示连接的本地端已经收到FIN来自另一端的a,但是OS正在等待本地端的程序真正关闭它的连接。

问题是您在本地机器上运行的程序没有关闭套接字。这不是TCP调优问题。CLOSE_WAIT当程序保持连接打开时,连接可以(并且非常正确地)永远保持。

一旦本地程序关闭套接字,操作系统就可以将 FIN 发送到远程端,LAST_ACK在您等待ACKFIN 的同时将您转换到远程端。一旦收到,连接就完成并从连接表中删除(如果你的结束在CLOSE_WAIT你不结束的TIME_WAIT状态)。

有一个内核级属性可以重用连接并减少CLOSE_WAIT时间。

我建议您按照本教程http://www.linuxbrigade.com/reduce-time_wait-socket-connections/

这应该可以解决您的问题。

于 2019-01-01T05:55:31.393 回答