zookeper 服务器上的连接太多
Too many connections on zookeper server
环境:HDP 2.6.4
Ambari – 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)
来自动物园管理员日志
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 吗?
CLOSE_WAIT
表示连接的本端收到了对端的FIN
,但是OS在等待本端的程序真正关闭它的联系。
问题是您在本地计算机上的程序 运行 没有关闭套接字。这不是 TCP
调整问题。当程序保持连接打开时,连接可以(并且非常正确地)永远保持 CLOSE_WAIT
。
一旦本地程序关闭套接字,OS 可以将 FIN 发送到远程端,在您等待 FIN 的 ACK
时将您转换到 LAST_ACK
。收到后,连接完成并从连接 table 断开(如果您的终端处于 CLOSE_WAIT
,您不会以 TIME_WAIT
状态结束)。
有内核级别属性重用连接并减少CLOSE_WAIT
时间。
我建议您按照本教程进行操作http://www.linuxbrigade.com/reduce-time_wait-socket-connections/
这应该可以解决您的问题。
环境:HDP 2.6.4
Ambari – 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)
来自动物园管理员日志
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 吗?
CLOSE_WAIT
表示连接的本端收到了对端的FIN
,但是OS在等待本端的程序真正关闭它的联系。
问题是您在本地计算机上的程序 运行 没有关闭套接字。这不是 TCP
调整问题。当程序保持连接打开时,连接可以(并且非常正确地)永远保持 CLOSE_WAIT
。
一旦本地程序关闭套接字,OS 可以将 FIN 发送到远程端,在您等待 FIN 的 ACK
时将您转换到 LAST_ACK
。收到后,连接完成并从连接 table 断开(如果您的终端处于 CLOSE_WAIT
,您不会以 TIME_WAIT
状态结束)。
有内核级别属性重用连接并减少CLOSE_WAIT
时间。
我建议您按照本教程进行操作http://www.linuxbrigade.com/reduce-time_wait-socket-connections/
这应该可以解决您的问题。