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

關(guān)于HttpClient 引發(fā)的線程太多導(dǎo)致FullGc的問題

 更新時間:2021年01月11日 14:18:54   作者:馬力2020  
這篇文章主要介紹了關(guān)于HttpClient 引發(fā)的線程太多導(dǎo)致FullGc的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
CloseableHttpClient httpClient = HttpClients.custom()
  .setConnectionManager(connectionManager)
  .setMaxConnTotal(400)
  .setMaxConnPerRoute(150)
  .evictExpiredConnections()
  .build();

evictExpiredConnections 這個配置作用:

設(shè)置一個定時線程,定時清理閑置連接,可以將這個定時時間設(shè)置為 keep alive timeout 時間的一半以保證超時前回收

每個httpClient 對象都會有自己獨立的定時線程

這樣如果應(yīng)用中httpClient對象很多,就會導(dǎo)致上圖中線程太多

源碼中,如果設(shè)置了evictExpiredConnections 會有下面一段邏輯

 List<Closeable> closeablesCopy = closeables != null ? new ArrayList<Closeable>(closeables) : null;
  if (!this.connManagerShared) {
   if (closeablesCopy == null) {
    closeablesCopy = new ArrayList<Closeable>(1);
   }
   final HttpClientConnectionManager cm = connManagerCopy;
 
   if (evictExpiredConnections || evictIdleConnections) {
    final IdleConnectionEvictor connectionEvictor = new IdleConnectionEvictor(cm,
      maxIdleTime > 0 ? maxIdleTime : 10, maxIdleTimeUnit != null ? maxIdleTimeUnit : TimeUnit.SECONDS,
      maxIdleTime, maxIdleTimeUnit);
    closeablesCopy.add(new Closeable() {
 
     @Override
     public void close() throws IOException {
      connectionEvictor.shutdown();
      try {
       connectionEvictor.awaitTermination(1L, TimeUnit.SECONDS);
      } catch (final InterruptedException interrupted) {
       Thread.currentThread().interrupt();
      }
     }
 
    });
    connectionEvictor.start();
   }
   closeablesCopy.add(new Closeable() {
 
    @Override
    public void close() throws IOException {
     cm.shutdown();
    }
 
   });
  }

IdleConnectionEvictor 對象是

public final class IdleConnectionEvictor {
 
 private final HttpClientConnectionManager connectionManager;
 private final ThreadFactory threadFactory;
 private final Thread thread;
 private final long sleepTimeMs;
 private final long maxIdleTimeMs;
 
 private volatile Exception exception;
 
 public IdleConnectionEvictor(
   final HttpClientConnectionManager connectionManager,
   final ThreadFactory threadFactory,
   final long sleepTime, final TimeUnit sleepTimeUnit,
   final long maxIdleTime, final TimeUnit maxIdleTimeUnit) {
  this.connectionManager = Args.notNull(connectionManager, "Connection manager");
  this.threadFactory = threadFactory != null ? threadFactory : new DefaultThreadFactory();
  this.sleepTimeMs = sleepTimeUnit != null ? sleepTimeUnit.toMillis(sleepTime) : sleepTime;
  this.maxIdleTimeMs = maxIdleTimeUnit != null ? maxIdleTimeUnit.toMillis(maxIdleTime) : maxIdleTime;
  this.thread = this.threadFactory.newThread(new Runnable() {
   @Override
   public void run() {
    try {
     while (!Thread.currentThread().isInterrupted()) {
      Thread.sleep(sleepTimeMs);
      connectionManager.closeExpiredConnections();
      if (maxIdleTimeMs > 0) {
       connectionManager.closeIdleConnections(maxIdleTimeMs, TimeUnit.MILLISECONDS);
      }
     }
    } catch (final Exception ex) {
     exception = ex;
    }
 
   }
  });
 }

會出現(xiàn)一個線程,這個線程里面就是去關(guān)閉超時不用的閑置鏈接

到此這篇關(guān)于關(guān)于HttpClient 引發(fā)的線程太多導(dǎo)致FullGc的問題的文章就介紹到這了,更多相關(guān)HttpClient 引發(fā)的線程太多導(dǎo)致FullGc內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 新手初學(xué)Java對象內(nèi)存構(gòu)成

    新手初學(xué)Java對象內(nèi)存構(gòu)成

    這篇文章主要介紹了深入理解JVM之Java對象的創(chuàng)建、內(nèi)存布局、訪問定位,結(jié)合實例形式詳細(xì)分析了Java對象的創(chuàng)建、內(nèi)存布局、訪問定位相關(guān)概念、原理、操作技巧與注意事項,需要的朋友可以參考下
    2021-07-07
  • 基于json解析神器 jsonpath的使用說明

    基于json解析神器 jsonpath的使用說明

    這篇文章主要介紹了基于json解析神器 jsonpath的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法

    SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法

    說到Spring Boot 單元測試主要有兩個主流集成分別是Mockito,Junit,這個各有特點,在實際開發(fā)中,我想要的測試框架應(yīng)該是這個框架集成者,本文給大家介紹了SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法,需要的朋友可以參考下
    2024-04-04
  • Java代碼審計的一些基礎(chǔ)知識你知道嗎

    Java代碼審計的一些基礎(chǔ)知識你知道嗎

    這篇文章主要介紹了基于Java的代碼審計功能的基礎(chǔ)知識,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • 在同一個類中調(diào)用帶有@Transactional注解的方法示例

    在同一個類中調(diào)用帶有@Transactional注解的方法示例

    這篇文章主要為大家介紹了在同一個類中調(diào)用帶有@Transactional注解的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java判斷一個字符串是不是一個數(shù)字的解決思路

    Java判斷一個字符串是不是一個數(shù)字的解決思路

    這篇文章主要給大家介紹了關(guān)于Java判斷一個字符串是不是一個數(shù)字的解決思路,判斷一個字符串是否為數(shù)字是Java開發(fā)中很常見的業(yè)務(wù)需求,實現(xiàn)這個判斷有很多種方式,需要的朋友可以參考下
    2023-08-08
  • Java接入支付寶授權(quán)第三方登錄的完整步驟

    Java接入支付寶授權(quán)第三方登錄的完整步驟

    不管是支付寶支付,還是微信支付,還是銀聯(lián)支付等,大部分的支付流程都是相似的,這篇文章主要給大家介紹了關(guān)于Java接入支付寶授權(quán)第三方登錄的相關(guān)資料,使用支付寶的沙盒環(huán)境示例,需要的朋友可以參考下
    2021-07-07
  • Java下http下載文件客戶端和上傳文件客戶端實例代碼

    Java下http下載文件客戶端和上傳文件客戶端實例代碼

    這篇文章主要介紹了Java下http下載文件客戶端和上傳文件客戶端實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12
  • rabbitmq消息ACK確認(rèn)機制及發(fā)送失敗處理方式

    rabbitmq消息ACK確認(rèn)機制及發(fā)送失敗處理方式

    這篇文章主要介紹了rabbitmq消息ACK確認(rèn)機制及發(fā)送失敗處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java實現(xiàn)計算圖中兩個頂點的所有路徑

    Java實現(xiàn)計算圖中兩個頂點的所有路徑

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實現(xiàn)計算圖中兩個頂點的所有路徑功能,文中通過示例詳細(xì)講解了實現(xiàn)的方法,需要的可以參考一下
    2022-10-10

最新評論

靖宇县| 进贤县| 炎陵县| 广安市| 绍兴县| 集安市| 盐亭县| 钦州市| 昌黎县| 英山县| 沾化县| 蒙阴县| 闻喜县| 宜良县| 临安市| 论坛| 华安县| 汉中市| 芜湖县| 盖州市| 平江县| 梁山县| 大名县| 西宁市| 泉州市| 济宁市| 合山市| 中西区| 包头市| 遂川县| 阜新市| 高尔夫| 南华县| 开阳县| 安丘市| 台安县| 彝良县| 福泉市| 南通市| 梨树县| 耒阳市|