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世界