Java, Only Java!

          統計

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評論排行榜

          HP-UX中CLOSE_WAIT問題解決

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

          但是,對于生產系統許多時候是不希望宕機的,有沒有直接斷開CLOSE_WAIT連接呢?可以,先用
          ndd -get /dev/tcp tcp_status |grep CLOSE_WAIT
          把已經CLOSE_WAIT的連接找出來,然后使用
          ndd -set /dev/tcp tcp_discon 0x<TCP地址>
          例如:輸入 ndd -get /dev/tcp tcp_status |grep 133
          結果
          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
          連接就會被主動斷開了。
          如果有人可以寫個腳本定期執行,至少能夠解決臨時性問題,如果要真正解決可能還需要想其他辦法,歡迎大家一起來討論。

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

          評論

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

          服務器進入CLOSE_WAIT,說明服務器是被動關閉,沒有發FIN,停留在CLOSE_WAIT狀態。解決辦法就是強制關閉,socket設置SoLinger選項。  回復  更多評論   

          # re: HP-UX中CLOSE_WAIT問題解決 2008-07-07 22:00 朱遠翔-Apusic技術顧問

          @dennis
          不好意思,沒明白你的留言,希望能再補充解釋一下,謝謝。  回復  更多評論   

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

          這個問題解決很簡單
          你在監聽套接字創建之后,
          int on=1;
          if(setsockopt(ListenSock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0)
          ....錯誤返回
          連接套接字創建之后,
          if(setsockopt(nLocalSock,SOL_SOCKET,SO_LINGER,(const char*)&ling,sizeof(ling)) !=0)
          ...錯誤返回
          這樣系統就不會出現close_wait狀態的tcp套接字了。  回復  更多評論   

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

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

          # 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 這個值。  回復  更多評論   

          主站蜘蛛池模板: 醴陵市| 龙江县| 瓦房店市| 涪陵区| 宜城市| 宿州市| 太白县| 鄯善县| 晋江市| 文昌市| 美姑县| 隆德县| 黄浦区| 镶黄旗| 海淀区| 樟树市| 赣榆县| 锡林郭勒盟| 宁阳县| 闽侯县| 广平县| 平安县| 肇庆市| 迁西县| 六盘水市| 安义县| 腾冲县| 高安市| 申扎县| 玉环县| 三亚市| 长治县| 枝江市| 于田县| 岢岚县| 青浦区| 湖口县| 繁昌县| 颍上县| 和龙市| 汝阳县|