真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

TIME_WAIT過多造成的問題如何解決

本文小編為大家詳細(xì)介紹“TIME_WAIT過多造成的問題如何解決”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“TIME_WAIT過多造成的問題如何解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

10余年的澄江網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整澄江建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“澄江網(wǎng)站設(shè)計(jì)”,“澄江網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

1、time_wait的作用:

  TIME_WAIT狀態(tài)存在的理由:

  1)可靠地實(shí)現(xiàn)TCP全雙工連接的終止

       在進(jìn)行關(guān)閉連接四次揮手協(xié)議時(shí),最后的ACK是由主動(dòng)關(guān)閉端發(fā)出的,如果這個(gè)最終的ACK丟失,服務(wù)器將重發(fā)最終的FIN,因此客戶端必須維護(hù)狀態(tài)信息允許它重發(fā)最終的ACK。如果不維持這個(gè)狀態(tài)信息,那么客戶端將響應(yīng)RST分節(jié),服務(wù)器將此分節(jié)解釋成一個(gè)錯(cuò)誤(在java中會(huì)拋出connection reset的SocketException)。

  因而,要實(shí)現(xiàn)TCP全雙工連接的正常終止,必須處理終止序列四個(gè)分節(jié)中任何一個(gè)分節(jié)的丟失情況,主動(dòng)關(guān)閉的客戶端必須維持狀態(tài)信息進(jìn)入TIME_WAIT狀態(tài)。

2)允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝
        TCP分節(jié)可能由于路由器異常而“迷途”,在迷途期間,TCP發(fā)送端可能因確認(rèn)超時(shí)而重發(fā)這個(gè)分節(jié),迷途的分節(jié)在路由器修復(fù)后也會(huì)被送到最終目的地,這個(gè)原來的迷途分節(jié)就稱為lost duplicate。
        在關(guān)閉一個(gè)TCP連接后,馬上又重新建立起一個(gè)相同的IP地址和端口之間的TCP連接,后一個(gè)連接被稱為前一個(gè)連接的化身(incarnation),那么有可能出現(xiàn)這種情況,前一個(gè)連接的迷途重復(fù)分組在前一個(gè)連接終止后出現(xiàn),從而被誤解成從屬于新的化身。
       為了避免這個(gè)情況,TCP不允許處于TIME_WAIT狀態(tài)的連接啟動(dòng)一個(gè)新的化身,因?yàn)門IME_WAIT狀態(tài)持續(xù)2MSL,就可以保證當(dāng)成功建立一個(gè)TCP連接的時(shí)候,來自連接先前化身的重復(fù)分組已經(jīng)在網(wǎng)絡(luò)中消逝。

2、大量TIME_WAIT造成的影響:
在高并發(fā)短連接的TCP服務(wù)器上,當(dāng)服務(wù)器處理完請(qǐng)求后立刻主動(dòng)正常關(guān)閉連接。這個(gè)場(chǎng)景下會(huì)出現(xiàn)大量socket處于TIME_WAIT狀態(tài)。如果客戶端的并發(fā)量持續(xù)很高,此時(shí)部分客戶端就會(huì)顯示連接不上。
我來解釋下這個(gè)場(chǎng)景。主動(dòng)正常關(guān)閉TCP連接,都會(huì)出現(xiàn)TIMEWAIT。

為什么我們要關(guān)注這個(gè)高并發(fā)短連接呢?有兩個(gè)方面需要注意:
1)高并發(fā)可以讓服務(wù)器在短時(shí)間范圍內(nèi)同時(shí)占用大量端口,而端口有個(gè)0~65535的范圍,并不是很多,刨除系統(tǒng)和其他服務(wù)要用的,剩下的就更少了。
2)在這個(gè)場(chǎng)景中,短連接表示“業(yè)務(wù)處理+傳輸數(shù)據(jù)的時(shí)間 遠(yuǎn)遠(yuǎn)小于 TIMEWAIT超時(shí)的時(shí)間”的連接。

  這里有個(gè)相對(duì)長短的概念,比如取一個(gè)web頁面,1秒鐘的http短連接處理完業(yè)務(wù),在關(guān)閉連接之后,這個(gè)業(yè)務(wù)用過的端口會(huì)停留在TIMEWAIT狀態(tài)幾分鐘,而這幾分鐘,其他HTTP請(qǐng)求來臨的時(shí)候是無法占用此端口的(占著茅坑不拉翔)。單用這個(gè)業(yè)務(wù)計(jì)算服務(wù)器的利用率會(huì)發(fā)現(xiàn),服務(wù)器干正經(jīng)事的時(shí)間和端口(資源)被掛著無法被使用的時(shí)間的比例是 1:幾百,服務(wù)器資源嚴(yán)重浪費(fèi)。(說個(gè)題外話,從這個(gè)意義出發(fā)來考慮服務(wù)器性能調(diào)優(yōu)的話,長連接業(yè)務(wù)的服務(wù)就不需要考慮TIMEWAIT狀態(tài)。同時(shí),假如你對(duì)服務(wù)器業(yè)務(wù)場(chǎng)景非常熟悉,你會(huì)發(fā)現(xiàn),在實(shí)際業(yè)務(wù)場(chǎng)景中,一般長連接對(duì)應(yīng)的業(yè)務(wù)的并發(fā)量并不會(huì)很高。
綜合這兩個(gè)方面,持續(xù)的到達(dá)一定量的高并發(fā)短連接,會(huì)使服務(wù)器因端口資源不足而拒絕為一部分客戶服務(wù)。同時(shí),這些端口都是服務(wù)器臨時(shí)分配,無法用SO_REUSEADDR選項(xiàng)解決這個(gè)問題。

3、案列分析:
首先,根據(jù)一個(gè)查詢TCP連接數(shù),來說明這個(gè)問題。

netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
  LAST_ACK 14
  SYN_RECV 348
  ESTABLISHED 70
  FIN_WAIT1 229
  FIN_WAIT2 30
  CLOSING 33
  TIME_WAIT 18122

狀態(tài)描述:

CLOSED:無連接是活動(dòng)的或正在進(jìn)行
    LISTEN:服務(wù)器在等待進(jìn)入呼叫
    SYN_RECV:一個(gè)連接請(qǐng)求已經(jīng)到達(dá),等待確認(rèn)
    SYN_SENT:應(yīng)用已經(jīng)開始,打開一個(gè)連接
    ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
    FIN_WAIT1:應(yīng)用說它已經(jīng)完成
    FIN_WAIT2:另一邊已同意釋放
    ITMED_WAIT:等待所有分組死掉
    CLOSING:兩邊同時(shí)嘗試關(guān)閉
    TIME_WAIT:另一邊已初始化一個(gè)釋放
    LAST_ACK:等待所有分組死掉

命令解釋:

先來看看netstat:
netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT
你實(shí)際執(zhí)行這條命令的時(shí)候,可能會(huì)得到成千上萬條類似上面的記錄,不過我們就拿其中的一條就足夠了。

再來看看awk:
/^tcp/
濾出tcp開頭的記錄,屏蔽udp, socket等無關(guān)記錄。
state[]相當(dāng)于定義了一個(gè)名叫state的數(shù)組

NF
表示記錄的字段數(shù),如上所示的記錄,NF等于6

$NF
表示某個(gè)字段的值,如上所示的記錄,$NF也就是$6,表示第6個(gè)字段的值,也就是TIME_WAIT
state[$NF]表示數(shù)組元素的值,如上所示的記錄,就是state[TIME_WAIT]狀態(tài)的連接數(shù)

++state[$NF]表示把某個(gè)數(shù)加一,如上所示的記錄,就是把state[TIME_WAIT]狀態(tài)的連接數(shù)加1

END
表示在最后階段要執(zhí)行的命令

for(key in state)
遍歷數(shù)組

如何盡量處理TIMEWAIT過多?
編輯內(nèi)核文件/etc/sysctl.conf,加入以下內(nèi)容:

1 表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉;
    net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;
    net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉。
    net.ipv4.tcp_fin_timeout 修改系默認(rèn)的 TIMEOUT 時(shí)間

然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效.

/etc/sysctl.conf是一個(gè)允許改變正在運(yùn)行中的Linux系統(tǒng)的接口,它包含一些TCP/IP堆棧和虛擬內(nèi)存系統(tǒng)的高級(jí)選項(xiàng),修改內(nèi)核參數(shù)永久生效。

簡單來說,就是打開系統(tǒng)的TIMEWAIT重用和快速回收。

如果以上配置調(diào)優(yōu)后性能還不理想,可繼續(xù)修改一下配置:

vi /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1200 
#表示當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度。缺省是2小時(shí),改為20分鐘。

net.ipv4.ip_local_port_range = 1024 65000 
#表示用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192 
#表示SYN隊(duì)列的長度,默認(rèn)為1024,加大隊(duì)列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。

net.ipv4.tcp_max_tw_buckets = 5000 
#表示系統(tǒng)同時(shí)保持TIME_WAIT套接字的最大數(shù)量,如果超過這個(gè)數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。
默認(rèn)為180000,改為5000。對(duì)于Apache、Nginx等服務(wù)器,上幾行的參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量,但是對(duì)于 Squid,效果卻不大。此項(xiàng)參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務(wù)器被大量的TIME_WAIT套接字拖死。

讀到這里,這篇“TIME_WAIT過多造成的問題如何解決”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享標(biāo)題:TIME_WAIT過多造成的問題如何解決
文章出自:http://weahome.cn/article/ijsgoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部