最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何解決TCP?socket的阻塞問(wèn)題

 更新時(shí)間:2021年12月13日 15:49:48   作者:shusy411  
這篇文章主要介紹了如何解決TCP?socket的阻塞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

解決TCP socket的阻塞問(wèn)題

大家知道,tcp的讀和寫(xiě)是阻塞的,即讀的時(shí)候不知道什么時(shí)候讀完,寫(xiě)的時(shí)候不知道什么時(shí)候?qū)懲?,因此線程就一直暫停在哪里,一般tcp程序用在上位機(jī)下位機(jī)之間對(duì)吧!

下位機(jī)一些設(shè)備一般會(huì)發(fā)心跳報(bào)文給我們機(jī)器,假設(shè)為10s發(fā)一次吧,當(dāng)機(jī)器超過(guò)10s沒(méi)接收到數(shù)據(jù),那么我們就要考慮把socket斷開(kāi),因?yàn)椴粩嚅_(kāi)的話設(shè)備重新連接可能又會(huì)建立新的socket,這樣如果設(shè)備反復(fù)斷開(kāi)連接的話,將產(chǎn)生大量的socket,占用大量系統(tǒng)資源,這里我們用socket.setSoTimeout(500)方法解決read方法的阻塞問(wèn)題,同時(shí)設(shè)定一個(gè)標(biāo)志位

在異常處理程序當(dāng)中退出socket連接

 public void run(){
     InputStream is = null;
  OutputStream os = null;
  int flag = 0;
  try {
   socket.setSoTimeout(500); //  0.5秒就退出read()方法的阻塞
   is = socket.getInputStream();
   os = socket.getOutputStream();

  } catch (Exception e2) {
   e2.printStackTrace();
  }

 while (true) {
   try {
    // 讀取數(shù)據(jù)
    int readlen = is.read(buff);
    if (readlen > 0) {
     flag = 0;
    }
    byte data[] = Arrays.copyOfRange(buff, 0, readlen);
    resolveData(data);
   } catch (IOException e) {
    try {

     flag++;
     if (flag == 200) {    
      is.close();
      os.close();
      socket.close();

     }
    } catch (Exception e1) {
     e1.printStackTrace();
    }

   }
  }
  }

TCP連接阻塞的監(jiān)控和處理

那么,什么樣的TCP連接屬于上述發(fā)生阻塞的異常連接呢?結(jié)合線上運(yùn)維經(jīng)驗(yàn)

我們整理出符合該類異常的特征如下

  • 該連接的Recv_Q的值特別大(超過(guò)3M)
  • 該連接的Recv_Q的值持續(xù)上漲,造成堆積(在一定滑動(dòng)時(shí)間窗口內(nèi))
  • 服務(wù)端進(jìn)程已長(zhǎng)時(shí)間不再處理該連接的請(qǐng)求(超過(guò)90秒)

其中Recv_Q的值可以通過(guò)netstat或ss系統(tǒng)工具即可進(jìn)行Recv_Q隊(duì)列大小的采樣,從而進(jìn)行閥值判斷。

netstat 的結(jié)果是讀取/proc/net/tcp文件而來(lái)的.

如何查看一個(gè)連接的創(chuàng)建時(shí)間

1.nestat -apn | grep xxx查看到對(duì)應(yīng)的連接的進(jìn)程pid和端口

2. 將上下游端口,轉(zhuǎn)換為16進(jìn)制xxxa xxxb

3.然后cat /proc/net/tcp | grep -i xxxa | grep -i xxxb找到該socket連接的inode inodex

4.ls -al /proc/pid/fd | grep inodex即可看見(jiàn)該socket文件的創(chuàng)建時(shí)間.

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實(shí)現(xiàn)俄羅斯方塊游戲

    java實(shí)現(xiàn)俄羅斯方塊游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)俄羅斯方塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java實(shí)現(xiàn)聊天機(jī)器人完善版

    Java實(shí)現(xiàn)聊天機(jī)器人完善版

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)聊天機(jī)器人完善版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot整合mybatis的方法詳解

    SpringBoot整合mybatis的方法詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合mybatis的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 詳談Java枚舉、靜態(tài)導(dǎo)入、自動(dòng)拆裝箱、增強(qiáng)for循環(huán)、可變參數(shù)

    詳談Java枚舉、靜態(tài)導(dǎo)入、自動(dòng)拆裝箱、增強(qiáng)for循環(huán)、可變參數(shù)

    下面小編就為大家?guī)?lái)一篇詳談Java枚舉、靜態(tài)導(dǎo)入、自動(dòng)拆裝箱、增強(qiáng)for循環(huán)、可變參數(shù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Java實(shí)現(xiàn)無(wú)損Word轉(zhuǎn)PDF的示例代碼

    Java實(shí)現(xiàn)無(wú)損Word轉(zhuǎn)PDF的示例代碼

    本文將利用Java中的兩個(gè)jar包:pdfbox和aspose-words實(shí)現(xiàn)無(wú)損Word轉(zhuǎn)PDF功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-06-06
  • MyBatis逆向工程生成dao層增刪改查的操作

    MyBatis逆向工程生成dao層增刪改查的操作

    這篇文章主要介紹了MyBatis逆向工程生成dao層增刪改查的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • IDEA 2020.1打開(kāi)時(shí)閃退的問(wèn)題及解決方法(完美解決方法)

    IDEA 2020.1打開(kāi)時(shí)閃退的問(wèn)題及解決方法(完美解決方法)

    這篇文章主要介紹了IDEA 2020.1打開(kāi)時(shí)閃退問(wèn)題及解決方法,本文給大家分享我的處理方案,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Spring?Boot整合持久層之JdbcTemplate多數(shù)據(jù)源

    Spring?Boot整合持久層之JdbcTemplate多數(shù)據(jù)源

    持久層是JavaEE中訪問(wèn)數(shù)據(jù)庫(kù)的核心操作,SpringBoot中對(duì)常見(jiàn)的持久層框架都提供了自動(dòng)化配置,例如JdbcTemplate、JPA 等,MyBatis 的自動(dòng)化配置則是MyBatis官方提供的。接下來(lái)分別向讀者介紹Spring Boot整合這持久層技術(shù)中的整合JdbcTemplate
    2022-08-08
  • SpringBoot整合H2數(shù)據(jù)庫(kù)的操作方法

    SpringBoot整合H2數(shù)據(jù)庫(kù)的操作方法

    H2是一個(gè)Java語(yǔ)言編寫(xiě)的嵌入式數(shù)據(jù)庫(kù),它不受平臺(tái)的限制,同時(shí)H2提供了一個(gè)十分方便的web控制臺(tái),用于操作和管理數(shù)據(jù)庫(kù)內(nèi)容,本文介紹SpringBoot整合H2數(shù)據(jù)庫(kù)的方法,感興趣的朋友一起看看吧
    2024-01-01
  • Netty如何設(shè)置為Https訪問(wèn)

    Netty如何設(shè)置為Https訪問(wèn)

    這篇文章主要介紹了Netty如何設(shè)置為Https訪問(wèn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

田林县| 新民市| 延安市| 宁阳县| 泰安市| 莆田市| 永平县| 楚雄市| 万年县| 会东县| 镇宁| 裕民县| 磴口县| 东港市| 军事| 资中县| 马关县| 莲花县| 礼泉县| 涟源市| 平陆县| 永善县| 德化县| 玉屏| 上高县| 沂水县| 崇明县| 博湖县| 新泰市| 绵阳市| 宣恩县| 临泉县| 仪陇县| 茌平县| 肇源县| 通州区| 岱山县| 康定县| 卢龙县| 西藏| 亚东县|