环境:HDP 2.6.4
安巴里– 2.6.1
3个Zookeeper服务器
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?
答案 0 :(得分:1)
CLOSE_WAIT
表示连接的本地端已从另一端收到FIN
,但操作系统正在等待本地端的程序实际关闭其连接。
问题是您在本地计算机上运行的程序没有关闭套接字。这不是TCP
调整问题。在程序保持连接打开的情况下,连接可以(并且非常正确地)永久停留在CLOSE_WAIT
中。
一旦本地程序关闭套接字,操作系统便可以将FIN发送到远程端,当您等待FIN的LAST_ACK
时,该远程端会将您转换到ACK
。接收到该消息后,连接完成并从连接表中删除(如果您的终端位于CLOSE_WAIT
中,则您不会以TIME_WAIT
状态结束)。
有一个内核级属性可以重用连接并减少CLOSE_WAIT
时间。
我建议您遵循本教程http://www.linuxbrigade.com/reduce-time_wait-socket-connections/
这应该可以解决您的问题。