天天看點

ElasticSearch--線程池(ThreadPool)--使用/設定

簡介

說明

        本文介紹ElasticSearch的線程池的配置。

        ES每個node都有多個線程池來管理記憶體占用,線程池都有一個queue來緩存需要處理的request而不是直接丢棄。

        ES的線程池有點兒類似于Java中的線程池。

官網網址

​​Thread pools | Elasticsearch Guide [8.4] | Elastic​​

線程池的類型

1. fixed

        fixed線程池是有固定線程數量的線程池,它有一個固定大小的queue來緩存處理不過來的任務。

設定一個fixed線程池:

thread_pool:
    write:
        size: 30
        queue_size: 1000      

        queue_size的值如果不設定的話預設為-1,代表無限大。當queue被填滿的時候請求就會被丢棄掉。

2. fixed_auto_queue_size

        這是實驗性的類型特性,fixed_auto_queue_size的thread的數量是fixed,但是queue的大小是根據一些規則進行變動的。

設定一個fixed_auto_queue_size線程池:

thread_pool:
    search:
        size: 30
        queue_size: 500
        min_queue_size: 10
        max_queue_size: 1000
        auto_queue_frame_size: 2000
        target_response_time: 1s      
  • queue_size
  • 初始化的queue的size數量
  • auto_queue_frame_size
  • 衡量是否需要擴容的請求數。
  • target_response_time
  • 當任務的處理時間(加上排隊時間)大于1s的時候會對queue進行縮容,來避免大量的逾時處理。

3. scaling

        這類線程池的thread的數量是可以基于負載的大小動态變化的。

設定一個scaling的線程池:

thread_pool:
    warmer:
        core: 1
        max: 8
        keep_alive: 2m      

keep_alive 指定了閑置的線程池達到2m會被回收。

重要的線程池

1. generic線程池

        普通線程池,一般用來運作背景任務或者discovery等,是一個大小可以scaling的線程池。

2. search線程池

        針對 count/search/suggest 操作。

        線程池的類型是 fixed_auto_queue_size 線程池的大小是固定值 int((# of available_processors * 3) / 2) + 1, 有一個可以伸縮的queue, queue size 初始值是 1000。

3. search_throttled線程池

        應對count/search/suggest/get 操作,但是這些對應的索引是search_throttled indices。

        線程池的類型是 fixed_auto_queue_size,thread 的size 是 1, queue_size 的初始值為 100.

4. get線程池

        get操作對應的線程池。

        Thread pool 的類型是 fixed,size 是 available processors,queue_size 是 1000.

5. analyze線程池

        analyze 請求對應的線程池。

        Thread pool 的類型是 fixed,size 是1,queue size 是16.

6. write線程池

        這個線程池對應處理的是index/delete/update請求和bulk請求。

        Thread pool 的類型是 fixed,size 是 available processors,queue size 是 200。thread pool最大的可設定的值為1+ available processors

7. snapshot線程池

        這個線程池對應處理的是snapshot/restore操作。

        Thread pool 的類型是 scaling,size 最大值是min(5, (# of available processors)/2),每個thread的keep-alive時間是5m,如果5m都是空閑的,那麼該線程就會别回收。

8. warmer線程池

        這個線程池對應處理的是segment warm-up 操作。

        Thread pool 的類型是scaling,size 最大值是min(5, (# of available processors)/2), 每個thread的keep-alive時間是5m,如果5m都是空閑的,那麼該線程就會别回收。

9. refresh線程池

        這個線程池對應處理的是refresh 操作。

        Thread pool 的類型是scaling,size 最大值是min(10, (# of available processors)/2),每個thread的keep-alive時間是5m,如果5m都是空閑的,那麼該線程就會别回收。

10. listener線程池

        這個線程池對應處理的是java client的操作。

        Thread pool 的類型是scaling,size 最大值是min(10, (# of available processors)/2), 每個thread的keep-alive時間是5m,如果5m都是空閑的,那麼該線程就會别回收。

Processors setting