• 线程池队列满导致错误


    百度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
          }
      }
  • 相关阅读:
    opencv入门踩坑之路(一)
    编写vue的时候(html也一样),限制一个div内可显示的字数
    win10开机后内存占用非常高,但是资源管理器显示的进程占用得很少,可以考虑更新驱动
    java 随机数产生 常用类及方法
    你不会的是这个正则表达式吗?
    系统编程第三次上机
    Java第三次上机随笔
    系统编程第二次实验
    Java第二次上机随笔
    面向对象-Java MOOC翁恺老师第一次作业
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9869844.html
Copyright © 2020-2023  润新知