天天看點

關于close_wait的了解

1 TCP連接配接

關于close_wait的了解

主動關閉(active close)的一方

被動關閉(passive close)的一方

關于close_wait的了解

2 出現的場景

close_wati 主要發生在 **被動關閉方 **,當主動關閉方因為突然中斷,或者請求失敗時,會發送fin包(要分手)給被動關閉方,但是被動關閉方因為代碼品質原因,無法徹底關閉所需資源,即無法回送fin包給主動關閉方,是以為一直處于close_wait狀态。

注:

場景1.當伺服器端連接配接mysql時(或者讀寫檔案流時),突然mysql中斷,這時,mysql會在中斷後,發送fin包給伺服器端,如果伺服器端沒有關流操作,那就會出現close_wait

場景2.當用戶端(比如浏覽器)請求伺服器時,如果浏覽器突然挂掉了,程序死了,那麼它就會給伺服器端發送fin包,後續和上面一樣

場景3.當用戶端(比如浏覽器)請求伺服器時,如果伺服器端遲遲不響應給用戶端,那麼用戶端也會給伺服器端發送fin包,後續和上面一樣

3 出現的原因

被動關閉方沒有在代碼中對請求進行異常處理。

4 解決辦法

4.1 治标

修改Linux系統參數

4.2 治本

排查代碼,被動關閉的一方沒有對主動關閉方發出的fin包,進行徹底關閉資源,檢查代碼是否對打開的資料流未進行正常和異常情況下的關閉。

繼續閱讀