国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

HttpClient 與 Close_Wait

網絡 網絡管理
服務器A需要通過HttpClient去連接另一個系統B提供的服務,運行一段時間后拋出以下異常:java.net.SocketException: Connection reset by peer: socket write error close_wait。

服務器A需要通過HttpClient去連接另一個系統B提供的服務,運行一段時間后拋出以下異常:java.net.SocketException: Connection reset by peer: socket write error close_wait

在服務器B上運行netstat命令,發現大量連接處于CLOSE_WAIT 狀態。

問題分析:

簡單來說CLOSE_WAIT數目過大是由于被動關閉連接處理不當導致的。

我說一個場景,服務器A會去請求服務器B上面的apache獲取文件資源,正常情況下,如果請求成功,那么在抓取完資源后服務器A會主動發出關閉連接的請求,這個時候就是主動關閉連接,連接狀態我們可以看到是TIME_WAIT。如果一旦發生異常呢?假設請求的資源服務器B上并不存在,那么這個時候就會由服務器B發出關閉連接的請求,服務器A就是被動的關閉了連接,如果服務器A被動關閉連接之后自己并沒有釋放連接,那就會造成CLOSE_WAIT的狀態了。

所以很明顯,問題還是處在程序里頭。

原始代碼塊:

  1. try 
  2. client = HttpConnectionManager.getHttpClient(); 
  3. HttpGet get = new HttpGet(); 
  4. get.setURI(new URI(urlPath)); 
  5. HttpResponse response = client.execute(get); 
  6. if (response.getStatusLine ().getStatusCode () != 200) { 
  7. return null; 
  8. HttpEntity entity =response.getEntity(); 
  9.  
  10. if( entity != null ){ 
  11. in = entity.getContent(); 
  12. ..... 
  13. return sb.toString (); 
  14.  
  15. catch (Exception e) 
  16. e.printStackTrace (); 
  17. return null; 
  18. finally 
  19. if (isr != null){ 
  20. try 
  21. isr.close (); 
  22. catch (IOException e) 
  23. e.printStackTrace (); 
  24. if (in != null){ 
  25. try 
  26. <span style="color:#ff0000;">in.close ();</span> 
  27. catch (IOException e) 
  28. e.printStackTrace (); 

HttpClient使用我們常用的InputStream.close()來確認連接關閉,分析上面的代碼,一旦出現非200的連接,這個連接將永遠僵死在連接池里頭,因為inputStream得不到初始化,永遠不會調用close()方法了。

 

通過代碼稍微修改,更嚴謹的處理異常情況就可以解決問題了:

  1. public static String readNet (String urlPath) 
  2. StringBuffer sb = new StringBuffer (); 
  3. HttpClient client = null
  4. InputStream in = null
  5. InputStreamReader isr = null
  6. HttpGet get = new HttpGet(); 
  7. try 
  8. client = HttpConnectionManager.getHttpClient(); 
  9. get.setURI(new URI(urlPath)); 
  10. HttpResponse response = client.execute(get); 
  11. if (response.getStatusLine ().getStatusCode () != 200) { 
  12. get.abort(); 
  13. return null; 
  14. HttpEntity entity =response.getEntity(); 
  15.  
  16. if( entity != null ){ 
  17. in = entity.getContent(); 
  18. ...... 
  19. return sb.toString (); 
  20.  
  21. catch (Exception e) 
  22. get.abort(); 
  23. e.printStackTrace (); 
  24. return null; 
  25. finally 
  26. if (isr != null){ 
  27. try 
  28. isr.close (); 
  29. catch (IOException e) 
  30. e.printStackTrace (); 
  31. if (in != null){ 
  32. try 
  33. in.close (); 
  34. catch (IOException e) 
  35. e.printStackTrace (); 

顯示調用HttpGet的abort,這樣就會直接中止這次連接,我們在遇到異常的時候應該顯示調用,因為誰能保證異常是在InputStream in賦值之后才拋出的呢。

more:

首先我們知道,如果我們的服務器程序處于CLOSE_WAIT狀態的話,說明套接字是被動關閉的!

因為如果是CLIENT端主動斷掉當前連接的話,那么雙方關閉這個TCP連接共需要四個packet:

 

Client –-> FIN  –-> Server
Client <–- ACK  <–- Server
這時候Client端處于FIN_WAIT_2狀態;而Server 程序處于CLOSE_WAIT狀態。
Client <–- FIN  <–- Server
這時Server 發送FIN給Client,Server 就置為LAST_ACK狀態。
Client –-> ACK  –-> Server
Client回應了ACK,那么Server 的套接字才會真正置為CLOSED狀態。

 

Server 程序處于CLOSE_WAIT狀態,而不是LAST_ACK狀態,說明還沒有發FIN給Client,那么可能是在關閉連接之前還有許多數據要發送或者其他事要做,導致沒有發這個FIN packet。

通常來說,一個CLOSE_WAIT會維持至少2個小時的時間(這個時間外網服務器通常會做調整,要不然太危險了)。如果有個流氓特地寫了個程序,給你造成一堆的CLOSE_WAIT,消耗

你的資源,那么通常是等不到釋放那一刻,系統就已經解決崩潰了。

只能通過修改一下TCP/IP的參數,來縮短這個時間:修改tcp_keepalive_*系列參數有助于解決這個問題。

但是實際上,還是主要是因為我們的程序代碼有問題,

 

more:

最近做httpclient做轉發服務,發現服務器上總是有很多close_wait狀態的連接,而且這些連接都不會關閉,最后導致服務器沒法建立新的網絡連接,從而停止響應。

后來在網上搜索了一下,發現解決的方法也很簡單,如果想重用連接,那就使用連接管理器,從連接管理器里獲取連接,然后定時的用連接管理器來釋放空閑連接。httpclient自帶了SimpleHttpConnectionManager,提供了

 

Java代碼 

  1. closeIdleConnections(long idleTimeout)  

這樣的方法。

如果不需要重用鏈接,則直接在httpmethod創建時,設置一個http頭信息就可以了

 

Java代碼

  1. httpmethod.setRequestHeader("Connection", "close");   

這樣就不會有惱人的close_wait了。

 

責任編輯:林琳
相關推薦

2015-03-27 10:18:25

TCP協議CLOSE_WAIT狀服務器異常

2011-08-25 14:00:48

close中文man

2011-08-24 10:24:26

CLOSE中文man

2024-08-20 08:05:14

WinformWndProc?Windows

2025-02-05 08:02:31

Winform開發窗體

2021-03-05 16:08:58

RestAPINET工具包

2011-08-25 16:57:51

iconv_close中文man

2021-07-15 14:27:47

LinuxSocketClose

2011-05-26 15:52:31

sleep()wait()

2014-08-08 09:39:40

httpClient

2021-06-06 13:07:06

.NETWindowsLinux

2021-06-05 23:41:47

NET異常 HttpClient

2009-06-16 13:22:59

SqlConnecti

2024-10-07 08:59:47

sleepwait線程

2024-08-29 09:11:38

GolangEOF連接池

2022-01-09 17:38:32

goHttpClient 集群

2024-09-13 09:32:30

2021-07-12 07:59:05

對象接口編程

2020-03-24 15:15:29

HttpClientOkHttpJava

2021-08-02 14:54:50

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

欧美日本一道本| 精品国产乱子伦一区二区| 99久久婷婷国产综合精品电影| av资源一区二区| 日韩av午夜| 韩国三级电影久久久久久| 欧美爱爱视频| 国产一区二区日韩精品欧美精品| 青草视频在线免费直播| 欧美色国产精品| 小明精品国产一区二区三区| 国产婷婷色一区二区三区四区| 亚洲精品中文字幕乱码三区不卡| 亚洲国产精品第一区二区三区| 成人春色激情网| 久久香蕉国产| 国产一区二区在线免费视频| 精品久久久久久久久久久下田| 91精品国产777在线观看| 日日夜夜综合| 色婷婷久久一区二区| 成人自拍av| 亚洲大胆人体av| 欧美人与性动交α欧美精品图片| 欧美裸体一区二区三区| 麻豆免费在线观看| 精品久久久久香蕉网| 丁香花视频在线观看| 欧美精品一区在线观看| h片在线观看| 亚洲男人天堂九九视频| 自拍偷拍亚洲图片| 国内精品小视频| 国内精品久久久久久久久电影网 | 久久免费成人精品视频| 美女日韩欧美| 一道本成人在线| julia中文字幕久久亚洲蜜臀| av影院午夜一区| 亚洲欧美丝袜| 9色精品在线| 久久精品国产一区二区三区日韩 | 亚洲日本欧美日韩高观看| 999久久欧美人妻一区二区| 国产成人免费xxxxxxxx| 国产免费观看高清视频| 中文字幕欧美一| 视频二区在线| 欧美一级片免费看| 国产精品第一国产精品| 4438全国亚洲精品在线观看视频| 成人av动漫在线观看| 国产尤物91| 粉嫩欧美一区二区三区高清影视| 日韩欧美国产片| 欧美三级午夜理伦三级中视频| 三级中文字幕在线观看| 91国在线精品国内播放| 日韩视频精品在线观看| 男人日女人视频网站| 亚洲一区二区三区中文字幕| a毛片在线播放| 欧美大片免费看| 红桃视频国产精品| 日韩美女爱爱视频| 亚洲国产日日夜夜| 超碰在线公开| 欧洲亚洲免费视频| 天堂一区二区在线免费观看| 日本熟妇人妻中出| 7777精品伊人久久久大香线蕉经典版下载 | 在线不卡一区| 国产主播欧美精品| 国产自产v一区二区三区c| 国产美女av| 亚洲第一福利网| 日本a口亚洲| 日韩在线视频在线| 图片区日韩欧美亚洲| 美女福利一区二区| 2014国产精品| 国产日产欧美一区二区三区| 久草免费在线| 欧美国产精品人人做人人爱| 欧美视频成人| 污视频网站观看| 亚洲成av人影院在线观看| 成人免费在线播放| 无码精品a∨在线观看中文| 欧美天堂亚洲电影院在线播放| 粉嫩av国产一区二区三区| 欧美日本亚洲| 亚洲在线视频一区| 久久99精品久久久野外观看| 视频一区二区精品| 亚洲综合久久av| 少妇精品视频在线观看| 欧美男人的天堂| 午夜视频在线观看一区| 自拍偷拍亚洲| 一区二区在线中文字幕电影视频 | 国产一区二区三区网| 97超碰在线人人| 日韩欧美国产三级| 亚洲人成亚洲精品| 已婚少妇美妙人妻系列| 精品一区二区亚洲| 夜夜嗨网站十八久久| 色视频在线看| 国产成人精品久久亚洲高清不卡| 国产mv日韩mv欧美| 麻豆蜜桃在线| 久久av一区二区三区漫画| 亚洲精品视频一区| 国产美女撒尿一区二区| 国产a级片免费观看| 俺去啦;欧美日韩| 成人精品一区二区三区中文字幕 | 日韩国产欧美亚洲| 亚洲美女在线看| 久久国产人妖系列| 丁香花电影在线观看完整版| 久久综合福利| 欧美高清性hdvideosex| 伊人久久亚洲美女图片| 国产在线黄色| 亚洲一区二区在线| 福利微拍一区二区| 亚洲精品二区三区| 水莓100在线视频| 国产裸体写真av一区二区| 国产精品盗摄一区二区三区| 国产视频网站一区二区三区| 国产极品尤物在线| 麻豆乱码国产一区二区三区| 91蜜桃免费观看视频| 国产成人久久精品一区二区三区| 欧美亚洲一二三区| 久久久在线观看| 一区二区高清在线| 91精品国产福利在线观看麻豆| 青青国产在线| 麻豆成人在线播放| 日韩电影中文字幕一区| 高清av一区二区| 99久久婷婷国产综合精品青牛牛| 免费男女羞羞的视频网站中文版| 欧洲美女免费图片一区| 亚洲五码中文字幕| 欧美淫片网站| 草碰在线视频| 伊人久久大香线蕉av一区| 国产一区二区免费| 欧美国产日本韩| 欧美日韩在线播放视频| 国产youjizz在线| 在线免费一区| 久久视频免费在线播放| 亚洲欧洲日韩女同| 欧美一区亚洲| 男人的天堂免费在线视频| 青青在线视频观看| 国产精品国产福利国产秒拍| 亚洲成av人片在线观看无码| 911精品产国品一二三产区| 国产亚洲精品日韩| 欧美日韩激情视频8区| 欧美一二三区精品| 欧美片在线播放| 精品91视频| 亚洲私拍视频| 日韩av片网站| 国产一区深夜福利| 精品国产1区2区3区| 久久综合中文字幕| 99热精品久久| 麻豆免费在线| 五月婷婷六月合| 国产精品区二区三区日本| 亚洲乱码av中文一区二区| 中文字幕精品一区二区精品绿巨人| 久久久久久久久久久久久久 | 椎名由奈av一区二区三区| 欧美阿v一级看视频| 1024在线看片你懂得| 在线观看亚洲色图| 久久精品五月婷婷| 久久久久北条麻妃免费看| 亚洲成人一二三| 国产精品66部| 久久高清精品| 成人在线黄色| 欧美精品a∨在线观看不卡| www成人免费| 91视频88av| 日韩视频在线免费观看| 在线观看区一区二| 欧美国产精品一区二区三区| 美女视频一区二区三区| 一区二区三区四区在线看|