close wait什么意思
close wait在英文中我們很少看到,但它卻確確實(shí)實(shí)地存在著,它的意思是什么呢?下面是學(xué)習(xí)啦小編給大家整理的close wait什么意思,供大家參閱!
close wait什么意思
等待結(jié)束
TIME WAIT和CLOSE WAIT狀態(tài)區(qū)別
在服務(wù)器的日常維護(hù)過程中,會經(jīng)常用到下面的命令:
它會顯示例如下面的信息:
[plain] view plain copy
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 814
CLOSE_WAIT 1
FIN_WAIT1 1
ESTABLISHED 634
SYN_RECV 2
LAST_ACK 1
常用的三個(gè)狀態(tài)是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主動(dòng)關(guān)閉,CLOSE_WAIT 表示被動(dòng)關(guān)閉。
TCP協(xié)議規(guī)定,對于已經(jīng)建立的連接,網(wǎng)絡(luò)雙方要進(jìn)行四次握手才能成功斷開連接,如果缺少了其中某個(gè)步驟,將會使連接處于假死狀態(tài),連接本身占用的資源不會被釋放。網(wǎng)絡(luò)服務(wù)器程序要同時(shí)管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費(fèi)許多服務(wù)器資源。在眾多TCP狀態(tài)中,最值得注意的狀態(tài)有兩個(gè):CLOSE_WAIT和TIME_WAIT。
TIME_WAIT
TIME_WAIT 是主動(dòng)關(guān)閉鏈接時(shí)形成的,等待2MSL時(shí)間,約4分鐘。主要是防止最后一個(gè)ACK丟失。 由于TIME_WAIT 的時(shí)間會非常長,因此server端應(yīng)盡量減少主動(dòng)關(guān)閉連接
CLOSE_WAIT
CLOSE_WAIT是被動(dòng)關(guān)閉連接是形成的。根據(jù)TCP狀態(tài)機(jī),服務(wù)器端收到客戶端發(fā)送的FIN,則按照TCP實(shí)現(xiàn)發(fā)送ACK,因此進(jìn)入CLOSE_WAIT狀態(tài)。但如果服務(wù)器端不執(zhí)行close(),就不能由CLOSE_WAIT遷移到LAST_ACK,則系統(tǒng)中會存在很多CLOSE_WAIT狀態(tài)的連接。此時(shí),可能是系統(tǒng)忙于處理讀、寫操作,而未將已收到FIN的連接,進(jìn)行close。此時(shí),recv/read已收到FIN的連接socket,會返回0。
為什么需要 TIME_WAIT 狀態(tài)?
假設(shè)最終的ACK丟失,server將重發(fā)FIN,client必須維護(hù)TCP狀態(tài)信息以便可以重發(fā)最終的ACK,否則會發(fā)送RST,結(jié)果server認(rèn)為發(fā)生錯(cuò)誤。TCP實(shí)現(xiàn)必須可靠地終止連接的兩個(gè)方向(全雙工關(guān)閉),client必須進(jìn)入 TIME_WAIT 狀態(tài),因?yàn)閏lient可能面 臨重發(fā)最終ACK的情形。
為什么 TIME_WAIT 狀態(tài)需要保持 2MSL 這么長的時(shí)間?
如果 TIME_WAIT 狀態(tài)保持時(shí)間不足夠長(比如小于2MSL),第一個(gè)連接就正常終止了。第二個(gè)擁有相同相關(guān)五元組的連接出現(xiàn),而第一個(gè)連接的重復(fù)報(bào)文到達(dá),干擾了第二個(gè)連接。TCP實(shí)現(xiàn)必須防止某個(gè)連接的重復(fù)報(bào)文在連接終止后出現(xiàn),所以讓TIME_WAIT狀態(tài)保持時(shí)間足夠長(2MSL),連接相應(yīng)方向上的TCP報(bào)文要么完全響應(yīng)完畢,要么被 丟棄。建立第二個(gè)連接的時(shí)候,不會混淆。
TIME_WAIT 和CLOSE_WAIT狀態(tài)socket過多
如果服務(wù)器出了異常,百分之八九十都是下面兩種情況:
1.服務(wù)器保持了大量TIME_WAIT狀態(tài)
2.服務(wù)器保持了大量CLOSE_WAIT狀態(tài),簡單來說CLOSE_WAIT數(shù)目過大是由于被動(dòng)關(guān)閉連接處理不當(dāng)導(dǎo)致的。
因?yàn)長inux分配給一個(gè)用戶的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT兩種狀態(tài)如果一直被保持,那么意味著對應(yīng)數(shù)目的通道就一直被占著,而且是“占著茅坑不使勁”,一旦達(dá)到句柄數(shù)上限,新的請求就無法被處理了,接著就是大量Too Many Open Files異常,Tomcat崩潰。
netstat listening close wait established等是什么意思
端口占用查詢命令“netstat”詳解 Netstat用于顯示與IP、TCP、UDP和ICMP協(xié)議相關(guān)的統(tǒng)計(jì)數(shù)據(jù),一般用于檢驗(yàn)本機(jī)各端口的網(wǎng)絡(luò)連接情況。 如果你的計(jì)算機(jī)有時(shí)候接收到的數(shù)據(jù)報(bào)導(dǎo)致出錯(cuò)數(shù)據(jù)或故障,你不必感到奇怪,TCP/IP可以容許這些類型的錯(cuò)誤,并能夠自動(dòng)重發(fā)數(shù)據(jù)報(bào)。但如果累計(jì)的出錯(cuò)情況數(shù)目占到所接收的IP數(shù)據(jù)報(bào)相當(dāng)大的百分比,或者它的數(shù)目正迅速增加,那么你就應(yīng)該使用Netstat查一查為什么會出現(xiàn)這些情況了。 Netstat 詳細(xì)參數(shù)列表 C:\>netstat /? 顯示協(xié)議統(tǒng)計(jì)信息和當(dāng)前 TCP/IP 網(wǎng)絡(luò)連接。 NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval] -a 顯示所有連接和監(jiān)聽端口。 -b 顯示包含于創(chuàng)建每個(gè)連接或監(jiān)聽端口的可執(zhí)行組件。在某些情況下已知可執(zhí)行組件 擁有多個(gè)獨(dú)立組件,并且在這些情況下包含于創(chuàng)建連接或監(jiān)聽端口的組件序列被顯示。 這種情況下,可執(zhí)行組件名在底部的 [] 中,頂部是其調(diào)用的組件,等等,直到 TCP/IP 部分。注意此選項(xiàng)可能需要很長時(shí)間,如果沒有足夠權(quán)限可能失敗。 -e 顯示以太網(wǎng)統(tǒng)計(jì)信息。此選項(xiàng)可以與 -s 選項(xiàng)組合使用。 -n 以數(shù)字形式顯示地址和端口號。 -o 顯示與每個(gè)連接相關(guān)的所屬進(jìn)程 ID。 -p proto 顯示 proto 指定的協(xié)議的連接;proto 可以是 下列協(xié)議之一: TCP、UDP、TCPv6 或 UDPv6。 如果與 -s 選項(xiàng)一起使用以顯示按協(xié)議統(tǒng)計(jì)信息,proto 可以是下列協(xié)議之一: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。 -r 顯示路由表。 -s 顯示按協(xié)議統(tǒng)計(jì)信息。默認(rèn)地,顯示 IP、 IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的統(tǒng)計(jì)信息; -p 選項(xiàng)用于指定默認(rèn)情況的子集。 -v 與 -b 選項(xiàng)一起使用時(shí)將顯示包含于 為所有可執(zhí)行組件創(chuàng)建連接或監(jiān)聽端口的 組件。 interval 重新顯示選定統(tǒng)計(jì)信息,每次顯示之間 暫停時(shí)間間隔(以秒計(jì))。按 CTRL+C 停止重新 顯示統(tǒng)計(jì)信息。如果省略,netstat 顯示當(dāng)前 配置信息(只顯示一次) (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的一些常用選項(xiàng) netstat -s——本選項(xiàng)能夠按照各個(gè)協(xié)議分別顯示其統(tǒng)計(jì)數(shù)據(jù)。如果你的應(yīng)用程序(如Web瀏覽器)運(yùn)行速度比較慢,或者不能顯示W(wǎng)eb頁之類的數(shù)據(jù),那么你就可以用本選項(xiàng)來查看一下所顯示的信息。你需要仔細(xì)查看統(tǒng)計(jì)數(shù)據(jù)的各行,找到出錯(cuò)的關(guān)鍵字,進(jìn)而確定問題所在。 netstat -e——本選項(xiàng)用于顯示關(guān)于以太網(wǎng)的統(tǒng)計(jì)數(shù)據(jù)。它列出的項(xiàng)目包括傳送的數(shù)據(jù)報(bào)的總字節(jié)數(shù)、錯(cuò)誤數(shù)、刪除數(shù)、數(shù)據(jù)報(bào)的數(shù)量和廣播的數(shù)量。這些統(tǒng)計(jì)數(shù)據(jù)既有發(fā)送的數(shù)據(jù)報(bào)數(shù)量,也有接收的數(shù)據(jù)報(bào)數(shù)量。這個(gè)選項(xiàng)可以用來統(tǒng)計(jì)一些基本的網(wǎng)絡(luò)流量。 netstat -r——本選項(xiàng)可以顯示關(guān)于路由表的信息,類似于后面所講使用route print命令時(shí)看到的 信息。除了顯示有效路由外,還顯示當(dāng)前有效的連接。 netstat -a——本選項(xiàng)顯示一個(gè)所有的有效連接信息列表,包括已建立的連接(ESTABLISHED),也包括監(jiān)聽連接請求(LISTENING)的那些連接,斷開連接(CLOSE_WAIT)或者處于聯(lián)機(jī)等待狀態(tài)的(TIME_WAIT)等 netstat -n——顯示所有已建立的有效連接。 接下來我們來看一下,微軟是怎么說的? 微軟公司故意將這個(gè)功能強(qiáng)大的命令隱藏起來是因?yàn)樗鼘τ谄胀ㄓ脩魜碚f有些復(fù)雜。我們已經(jīng)知道:Netstat它可以用來獲得你的系統(tǒng)網(wǎng)絡(luò)連接的信息(使用的端口,在使用的協(xié)議等 ),收到和發(fā)出的數(shù)據(jù),被連接的遠(yuǎn)程系統(tǒng)的端口,Netstat在內(nèi)存中讀取所有的網(wǎng)絡(luò)信息。 在Internet RFC標(biāo)準(zhǔn)中,Netstat的定義是: Netstat是在內(nèi)核中訪問網(wǎng)絡(luò)及相關(guān)信息的程序,它能提供TCP連接,TCP和UDP監(jiān)聽,進(jìn)程內(nèi)存管理的相關(guān)報(bào)告。 看其中有個(gè)localaddress 和一個(gè)foreignaddress如果沒打開任何網(wǎng)絡(luò)連接,卻有established說明就有問題,注意,你得保證沒有你開的任何的網(wǎng)絡(luò)連接,包括后臺進(jìn)程,如果還是有established說明才有問題。
看過close wait什么意思的人還看了: