zoukankan      html  css  js  c++  java
  • 线程池队列满导致错误

    百度Elasticsearch-产品描述-介绍-百度云 https://cloud.baidu.com/doc/BES/FAQ.html#.07.DD.6F.A4.B5.A3.C2.EF.11.44.39.11.6C.5D.61.A5

    线程池队列满导致错误

    在这种场景下ES抛出的异常是

    rejected execution of org.elasticsearch.transport.TransportService$4@c8998f4 
    on EsThreadPoolExecutor[bulk, queue capacity = 50, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@553aee29
    [Running, pool size = 4, active threads = 4, queued tasks = 50, completed tasks = 0]]
    复制

    ES内部有很多线程池,比如index,search,bulk是我们能够看到的3个典型的线程池,如果系统的压力特别大,后台线程处理不过来的时候,用户发起的任务会在线程池的队列里堆积,如果达到队列的上限就会抛出对应的异常,遇到这种错误需要做以下两步:

    • 检查系统的CPU和IO的利用情况,如果系统的IO和CPU的利用率比较高,这说明系统遇到资源瓶颈了,已经不能通过优化系统的参数来避免这种错误发生了。
    • 如果资源没有问题,那么检查当先线程池的配置,比如上面这个错误就需要检查bulk的线程池的配置,在sense里执行以下命令:

      GET /_cluster/settings
      复制

      结果如下

      "threadpool": {
           "bulk": {
              "type": "fixed",
              "size": "4",
              "queue_size": "50"
           }
        }
      复制

      这个结果表示处理bulk任务的线程池有4个执行线程,队列数为50. 根据我们的经验看,这个值还是比较小的,所以可以直接用以下操作处理:

      PUT /_cluster/settings
      {
          "persistent": {
              "threadpool.bulk.size": 32,
              "threadpool.bulk.queue_size": 300
          }
      }

    线程池队列满导致错误

    在这种场景下ES抛出的异常是

    rejected execution of org.elasticsearch.transport.TransportService$4@c8998f4 
    on EsThreadPoolExecutor[bulk, queue capacity = 50, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@553aee29
    [Running, pool size = 4, active threads = 4, queued tasks = 50, completed tasks = 0]]
    复制

    ES内部有很多线程池,比如index,search,bulk是我们能够看到的3个典型的线程池,如果系统的压力特别大,后台线程处理不过来的时候,用户发起的任务会在线程池的队列里堆积,如果达到队列的上限就会抛出对应的异常,遇到这种错误需要做以下两步:

    • 检查系统的CPU和IO的利用情况,如果系统的IO和CPU的利用率比较高,这说明系统遇到资源瓶颈了,已经不能通过优化系统的参数来避免这种错误发生了。
    • 如果资源没有问题,那么检查当先线程池的配置,比如上面这个错误就需要检查bulk的线程池的配置,在sense里执行以下命令:

      GET /_cluster/settings
      复制

      结果如下

      "threadpool": {
           "bulk": {
              "type": "fixed",
              "size": "4",
              "queue_size": "50"
           }
        }
      复制

      这个结果表示处理bulk任务的线程池有4个执行线程,队列数为50. 根据我们的经验看,这个值还是比较小的,所以可以直接用以下操作处理:

      PUT /_cluster/settings
      {
          "persistent": {
              "threadpool.bulk.size": 32,
              "threadpool.bulk.queue_size": 300
          }
      }
  • 相关阅读:
    MySQL 8.0+ 时区问题
    SSM框架整合搭建流程
    最大子段和、最大子矩阵和
    棋盘覆盖(分治)
    石子合并问题
    矩阵连乘
    selenium完成滑块验证
    背包问题(2)
    背包问题(1)
    皇后问题
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9869844.html
Copyright © 2011-2022 走看看