簡介
說明
本文介紹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都是空閑的,那麼該線程就會别回收。