Java, Only Java!

          統(tǒng)計(jì)

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評(píng)論排行榜

          HP-UX中CLOSE_WAIT問題解決

          作者一直被某個(gè)項(xiàng)目的HP-UX折磨,系統(tǒng)運(yùn)行一段時(shí)間后就會(huì)出現(xiàn)大量的CLOSE_WAIT連接,然后Apusic應(yīng)用服務(wù)器就一直處于非常繁忙的狀態(tài),但是Dump JVM發(fā)現(xiàn)Apusic的許多線程處在空閑狀態(tài),此時(shí)將Apusic重新啟動(dòng)將連接全部釋放系統(tǒng)就恢復(fù)正常了。
          分析認(rèn)為因?yàn)橄到y(tǒng)在公網(wǎng)上受到攻擊有關(guān),攻擊會(huì)建立大量的空閑連接,然后使連接處于CLOSE_WAIT狀態(tài),從而系統(tǒng)需要消耗大量的資源去維護(hù)這些連接直到斷開,從而影響系統(tǒng)運(yùn)行的效果。
          為此,作者調(diào)整了相關(guān)的網(wǎng)絡(luò)參數(shù),效果比較明顯,CPU壓力大幅下降。
          ndd -set /dev/tcp tcp_keepalive_interval 120000

          但是,對(duì)于生產(chǎn)系統(tǒng)許多時(shí)候是不希望宕機(jī)的,有沒有直接斷開CLOSE_WAIT連接呢?可以,先用
          ndd -get /dev/tcp tcp_status |grep CLOSE_WAIT
          把已經(jīng)CLOSE_WAIT的連接找出來,然后使用
          ndd -set /dev/tcp tcp_discon 0x<TCP地址>
          例如:輸入 ndd -get /dev/tcp tcp_status |grep 133
          結(jié)果
          000000005843e168 010.010.010.133???????????????????????? 48a68cfa 48a68cf8 00008000 00008072 b64b7c33 b64b7c33 00008000 00500 01460 [17,c539] TCP_ESTABLISHED
          再輸入 ndd -set /dev/tcp tcp_discon 0x000000005843e168
          連接就會(huì)被主動(dòng)斷開了。
          如果有人可以寫個(gè)腳本定期執(zhí)行,至少能夠解決臨時(shí)性問題,如果要真正解決可能還需要想其他辦法,歡迎大家一起來討論。

          posted on 2008-06-20 07:56 zYx.Tom 閱讀(3600) 評(píng)論(5)  編輯  收藏 所屬分類: 1.Java世界

          評(píng)論

          # re: HP-UX中CLOSE_WAIT問題解決 2008-06-21 00:56 dennis

          服務(wù)器進(jìn)入CLOSE_WAIT,說明服務(wù)器是被動(dòng)關(guān)閉,沒有發(fā)FIN,停留在CLOSE_WAIT狀態(tài)。解決辦法就是強(qiáng)制關(guān)閉,socket設(shè)置SoLinger選項(xiàng)。  回復(fù)  更多評(píng)論   

          # re: HP-UX中CLOSE_WAIT問題解決 2008-07-07 22:00 朱遠(yuǎn)翔-Apusic技術(shù)顧問

          @dennis
          不好意思,沒明白你的留言,希望能再補(bǔ)充解釋一下,謝謝。  回復(fù)  更多評(píng)論   

          # re: HP-UX中CLOSE_WAIT問題解決 2009-01-15 15:56 myloveunix

          這個(gè)問題解決很簡(jiǎn)單
          你在監(jiān)聽套接字創(chuàng)建之后,
          int on=1;
          if(setsockopt(ListenSock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0)
          ....錯(cuò)誤返回
          連接套接字創(chuàng)建之后,
          if(setsockopt(nLocalSock,SOL_SOCKET,SO_LINGER,(const char*)&ling,sizeof(ling)) !=0)
          ...錯(cuò)誤返回
          這樣系統(tǒng)就不會(huì)出現(xiàn)close_wait狀態(tài)的tcp套接字了。  回復(fù)  更多評(píng)論   

          # re: HP-UX中CLOSE_WAIT問題解決 2009-01-15 16:04 myloveunix

          補(bǔ)充:
          struct linger ling;
          ling.l_onoff=1;
          ling.l_linger=5;/* (容許逗留的時(shí)間為5秒) */  回復(fù)  更多評(píng)論   

          # re: HP-UX中CLOSE_WAIT問題解決 2012-06-02 16:50 bigtank

          ndd -get /dev/tcp tcp_status | awk '$19=="CLOSE_WAIT" { print $1 }'|xargs -i ndd -set /dev/tcp tcp_discon {}

          但是,似乎沒有tcp_discon 這個(gè)值。  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 蓝田县| 广河县| 遂宁市| 瓦房店市| 乡宁县| 宜城市| 芒康县| 邢台市| 休宁县| 自贡市| 清镇市| 弥勒县| 若尔盖县| 深圳市| 金沙县| 冕宁县| 平谷区| 南和县| 敦煌市| 沅江市| 武冈市| 多伦县| 绿春县| 磐安县| 连山| 梁河县| 成都市| 伽师县| 绿春县| 黄石市| 沧源| 安溪县| 水城县| 永清县| 南城县| 高密市| 上思县| 长子县| 微博| 育儿| 绥芬河市|