瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          QQ 導致mysql 服務無法啟動

          Posted on 2010-09-06 10:59 瘋狂 閱讀(2037) 評論(0)  編輯  收藏 所屬分類: java 、java性能
             今天啟動mysql的時候,發(fā)現(xiàn)一起無法啟動,然后就去檢查3306是否被占用,結果使用netstat -ano 一看如下:


          結果一看竟然被qq進程占用著,并且處于close_wait狀態(tài)。
          處理方法:直接干掉qq進程,然后啟動mysql即可。

          以下是關于tcp 狀態(tài)一些介紹 供大家參考:
           Close_Wait狀態(tài)解釋

          CLOSE_WAIT狀態(tài)的生成原因
          通過TCP的狀態(tài)圖我們可以看出只有被動關閉的一端才有CLOSE_WAIT狀態(tài),當收到Fin并發(fā)送了Ack后
          服務器狀態(tài)就變成了CLOSE_WAIT狀態(tài),如果我們的服務器一直處于CLOSE_WAIT狀態(tài)的話,說明套接字是被動關閉的!,并且沒有發(fā)送Fin信令,原因往往是沒有調(diào)用TCP的CloseSocket。

          解決CLOSE_WAIT的方法:
          1 一般原因都是TCP連接沒有調(diào)用關閉方法。需要應用來處理網(wǎng)絡鏈接關閉。
          2 對于Web請求出現(xiàn)這個原因,經(jīng)常是因為Response的BodyStream沒有調(diào)用Close.
          比如Widnows下:
          使用HttpWebRequest 一定要保證GetRequestStream和GetResponse對象關閉,否則容易造成連接處于CLOSE_WAIT狀態(tài)
          3 TCP的KeepLive功能,可以讓操作系統(tǒng)替我們自動清理掉CLOSE_WAIT的連接。
          但是KeepLive在Windows操作系統(tǒng)下默認是7200秒,也就是2個小時才清理一次。往往滿足不了要求。可以調(diào)小該數(shù)值。
          Windows下的調(diào)整方法為
          HKEY_LOCAL_MACHINE"CurrentControlSet"Services"Tcpip"Parameters下的以下三個參數(shù):
          KeepAliveInterval,設置其值為1000
          KeepAliveTime,設置其值為300000(單位為毫秒,300000代表5分鐘)
          TcpMaxDataRetransmissions,設置其值為5

          Close_Wait引發(fā)的問題:
          Close_Wait會占用一個連接,網(wǎng)絡可用連接小。數(shù)量過多,可能會引起網(wǎng)絡性能下降,并占用系統(tǒng)非換頁內(nèi)存。 尤其是在有連接池的情況下(比如HttpRequest)
          會耗盡連接池的網(wǎng)絡連接數(shù),導致無法建立網(wǎng)絡連接

          --------------------------------------------
          TCP狀態(tài)轉移要點
              TCP協(xié)議規(guī)定,對于已經(jīng)建立的連接,網(wǎng)絡雙方要進行四次握手才能成功斷開連接,如果缺少了其中某個步驟,將會使連接處于假死狀態(tài),連接本身占用的資源不會被釋放。網(wǎng)絡服務器程序要同時管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費許多服務器資源。在眾多TCP狀態(tài)中,最值得注意的狀態(tài)有兩個:CLOSE_WAIT和TIME_WAIT。  

          1、LISTENING狀態(tài)
            FTP服務啟動后首先處于偵聽(LISTENING)狀態(tài)。
          2、ESTABLISHED狀態(tài)
            ESTABLISHED的意思是建立連接。表示兩臺機器正在通信。
          3、CLOSE_WAIT
              對方主動關閉連接或者網(wǎng)絡異常導致連接中斷,這時我方的狀態(tài)會變成CLOSE_WAIT 此時我方要調(diào)用close()來使得連接正確關閉
          4、TIME_WAIT
              我方主動調(diào)用close()斷開連接,收到對方確認后狀態(tài)變?yōu)門IME_WAIT。TCP協(xié)議規(guī)定TIME_WAIT狀態(tài)會一直持續(xù)2MSL(即兩倍的分段最大生存期),以此來確保舊的連接狀態(tài)不會對新連接產(chǎn)生影響。處于TIME_WAIT狀態(tài)的連接占用的資源不會被內(nèi)核釋放,所以作為服務器,在可能的情況下,盡量不要主動斷開連接,以減少TIME_WAIT狀態(tài)造成的資源浪費。
              目前有一種避免TIME_WAIT資源浪費的方法,就是關閉socket的LINGER選項。但這種做法是TCP協(xié)議不推薦使用的,在某些情況下這個操作可能會帶來錯誤。

          詳細一點的文檔:
          http://apps.hi.baidu.com/share/detail/10908121
          主站蜘蛛池模板: 永泰县| 肥西县| 聊城市| 子长县| 兴隆县| 纳雍县| 青冈县| 斗六市| 肇庆市| 郑州市| 武鸣县| 鹿泉市| 南京市| 龙游县| 建阳市| 莲花县| 安吉县| 霞浦县| 荆门市| 石狮市| 莱阳市| 南丰县| 苏尼特右旗| 远安县| 临沂市| 常山县| 舟曲县| 宁远县| 冀州市| 商南县| 开封市| 合水县| 新化县| 通辽市| 平原县| 汉中市| 霍邱县| 平南县| 大方县| 东乌珠穆沁旗| 赤城县|