一、close wait什么意思
close wait在英文中我们很少看到,但它却确确实实地存在着,它的意思是什么呢?下面是我给大家整理的close wait什么意思,供大家参阅!

在服务器的日常维护过程中,会经常用到下面的命令:
netstat-n| awk'/^tcp/{++S[$NF]} END{for(a in S) print a, S[a]}'
常用的三个状态是:ESTABLISHED表示正在通信,TIME_WAIT表示主动关闭,CLOSE_WAIT表示被动关闭。
TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。
TIME_WAIT是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。由于TIME_WAIT的时间会非常长,因此server端应尽量减少主动关闭连接
CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接。此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到FIN的连接socket,会返回0。
假设最终的ACK丢失,server将重发FIN,client必须维护TCP状态信息以便可以重发最终的ACK,否则会发送RST,结果server认为发生错误。TCP实现必须可靠地终止连接的两个方向(全双工关闭),client必须进入 TIME_WAIT状态,因为client可能面临重发最终ACK的情形。
为什么 TIME_WAIT状态需要保持 2MSL这么长的时间?
如果 TIME_WAIT状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现,而第一个连接的重复报文到达,干扰了第二个连接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT状态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被丢弃。建立第二个连接的时候,不会混淆。
TIME_WAIT和CLOSE_WAIT状态socket过多
如果服务器出了异常,百分之八九十都是下面两种情况:
1.服务器保持了大量TIME_WAIT状态
2.服务器保持了大量CLOSE_WAIT状态,简单来说CLOSE_WAIT数目过大是由于被动关闭连接处理不当导致的。
因为Linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,而且是“占着茅坑不使劲”,一旦达到句柄数上限,新的请求就无法被处理了,接着就是大量Too Many Open Files异常,Tomcat崩溃。
端口占用查询命令“netstat”详解 Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。 Netstat详细参数列表 C:\>netstat/?显示协议统计信息和当前 TCP/IP网络连接。 NETSTAT [-a][-b][-e][-n][-o][-p proto][-r][-s][-v][interval]-a显示所有连接和监听端口。-b显示包含于创建每个连接或监听端口的可执行组件。在某些情况下已知可执行组件拥有多个独立组件,并且在这些情况下包含于创建连接或监听端口的组件序列被显示。这种情况下,可执行组件名在底部的[]中,顶部是其调用的组件,等等,直到 TCP/IP部分。注意此选项可能需要很长时间,如果没有足够权限可能失败。-e显示以太网统计信息。此选项可以与-s选项组合使用。-n以数字形式显示地址和端口号。-o显示与每个连接相关的所属进程 ID。-p proto显示 proto指定的协议的连接;proto可以是下列协议之一: TCP、UDP、TCPv6或 UDPv6。如果与-s选项一起使用以显示按协议统计信息,proto可以是下列协议之一: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP或 UDPv6。-r显示路由表。-s显示按协议统计信息。默认地,显示 IP、 IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和 UDPv6的统计信息;-p选项用于指定默认情况的子集。-v与-b选项一起使用时将显示包含于为所有可执行组件创建连接或监听端口的组件。 interval重新显示选定统计信息,每次显示之间暂停时间间隔(以秒计)。按 CTRL+C停止重新显示统计信息。如果省略,netstat显示当前配置信息(只显示一次)(Win2000) C:\>netstat/? Displays protocol statistics and current TCP/IP network connections. NETSTAT [-a][-e][-n][-s][-p proto][-r][interval]-a Displays all connections and listening ports.-e Displays Ethernet statistics. This may be combined with the-s option.-n Displays addresses and port numbers in numerical form.-p proto Shows connections for the protocol specified by proto; proto may be TCP or UDP. If used with the-s option to display per-protocol statistics, proto may be TCP, UDP, or IP.-r Displays the routing table.-s Displays per-protocol statistics. By default, statistics are shown for TCP, UDP and IP; the-p option may be used to specify a subset of the default. interval Redisplays selected statistics, pausing interval seconds between each display. Press CTRL+C to stop redisplaying statistics. If omitted, netstat will print the current configuration information once. Netstat的一些常用选项 netstat-s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。 netstat-e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。 netstat-r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。 netstat-a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接,断开连接(CLOSE_WAIT)或者处于联机等待状态的(TIME_WAIT)等 netstat-n——显示所有已建立的有效连接。接下来我们来看一下,微软是怎么说的?微软公司故意将这个功能强大的命令隐藏起来是因为它对于普通用户来说有些复杂。我们已经知道:Netstat它可以用来获得你的系统网络连接的信息(使用的端口,在使用的协议等),收到和发出的数据,被连接的远程系统的端口,Netstat在内存中读取所有的网络信息。在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。看其中有个localaddress和一个foreignaddress如果没打开任何网络连接,却有established说明就有问题,注意,你得保证没有你开的任何的网络连接,包括后台进程,如果还是有established说明才有问题。
二、如何手动关闭close_wait
2、close是指关闭工作薄,在excel中的操作就是指退出工作薄。对工作薄发生了修改或者创建的工作,那么excel会提示我们去保存修改动作。
3、关闭工作薄对象必须指定激活对象。
4、close方法会检查工作薄的save属性,save属性为TRUE,那么close会自动执行save属性的设置,而忽略自身的参数设置,直接保存后退出。
三、closewait状态默认多久释放
netstat-n| awk'/^tcp/{++S[$NF]} END{for(a in S) print a, S[a]}'
#对于一个新建连接,内核要发送多少个 SYN连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间
#net.ipv4.tcp_synack_retries=2
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒
net.ipv4.tcp_keepalive_time=1200
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog= 4096
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_keepalive_probes=5
net.core.netdev_max_backlog=3000
修改完之后执行/sbin/sysctl-p让参数生效
关于closewait,closewait状态的原因与解决方法的介绍到此结束,希望对大家有所帮助。









