7、监控网络连接使用情况
netstat -ano >> c:\cmd.txt
因为输出有点多,所以拿到外面来具体分析。
内容如下:
可以看到88这台服务器(zabbix)有很多time_wait的连接
说明:time_wait状态的tcp连接:
1.这是一种处于连接完全关闭状态前的状态;
2.通常要等上4分钟(windows server)的时间才能完全关闭;
3.这种状态下的tcp连接占用句柄与端口等资源,服务器也要为维护这些连接状态消耗资源;
4.winserver解决这种time_wait的tcp连接只有让服务器能够快速回收和重用那些TIME_WAIT的资源:修改注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]添加dword值TcpTimedWaitDelay=30(30也为微软建议值;默认为2分钟)和MaxUserPort:65534(可选值5000 - 65534);
8、zabbix为什么会出现这么多TIME_WAIT?
表格中的state是TCP连接在agent和server不同阶段时的状态。我们假设每个阶段,agent和server都会得到正确的状态!
passive agent通信的过程如下:
- 1: tcp连接是通过socket通信的,每个socket都是为唯一的,address:port--address:port
- 2: 第二行的SYN/ACK如果没有发送,那么第一步的SYN会重新发送。在缺省的timeout设置中,如果丢了这个SYN/ACK过程,连接将会被重置(RST),并且这个获取数据的过程将会失败!
- 3: 当前的连接是全双工的工作模式
- 4: PUSH标志表明当前正在传送数据!
- 7: 没有其它事要做,关闭连接。在接下来的关闭过程中,agent会保留TIME_WAIT状态!请去看下TCP连接的3次握手,和TCP关闭的4次挥手过程。 这里并不是正确的连接关闭过程。
- 8: 带有FIN标志的数据报会被立刻确认,然后zabbix server 立刻知道这个连接已经关闭。
- 9: zabbix server确认连接关闭的时候,它也会立刻发送一个带FIN的数据包
- 10: 立刻确认第九步的FIN,到此为止,这个连接就关闭了!
- 11:passive zabbix agent的连接过程,并没有第十一步的数据报!当第十步中,server端确认连接关闭,并转变状态为closed之后, agent会把TIME_WAIT挂起两分钟。 这意味着这个连接在两分钟内是不可重用的。
注意:
使用TCP协议,是为了在不可靠的网络环境中创建可靠的连接!zabbix并不支持UDP和长连接的方式(persistent connection)
到这里问题基本解决了,不过还得后面继续观察,所以先记录到这里了。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
如果你觉得这篇文章对你有帮助, 请小小打赏下.