ES線程池設置


每個Elasticsearch節點內部都維護着多個線程池,如index、search、get、bulk等,用戶可以修改線程池的類型和大小,線程池默認大小跟CPU邏輯一致

 

一、查看當前線程組狀態

curl -XGET 'http://localhost:9200/_nodes/stats?pretty'

 

"thread_pool" : {
    "bulk" : {
      "threads" : 32,
      "queue" : 0,
      "active" : 0,
      "rejected" : 0,
      "largest" : 32,
      "completed" : 659997
    },
"index" : {
      "threads" : 2,
      "queue" : 0,
      "active" : 0,
      "rejected" : 0,
      "largest" : 2,
      "completed" : 2
    }

 

上面截取了部分線程池的配置,其中,最需要關注的是rejected。當某個線程池active==threads時,表示所有線程都在忙,那么后續新的請求就會進入queue中,即queue>0,一旦queue大小超出限制,如bulk的queue默認50,那么elasticsearch進程將拒絕請求(碰到bulk HTTP狀態碼429),相應的拒絕次數就會累加到rejected中。

解決方法是

1、記錄失敗的請求並重發

2、減少並發寫的進程個數,同時加大每次bulk請求的size

 

二、核心線程池

index:此線程池用於索引和刪除操作。它的類型默認為fixed,size默認為可用處理器的數量,隊列的size默認為300。
search:此線程池用於搜索和計數請求。它的類型默認為fixed,size默認為可用處理器的數量乘以3,隊列的size默認為1000。
suggest:此線程池用於建議器請求。它的類型默認為fixed,size默認為可用處理器的數量,隊列的size默認為1000。
get:此線程池用於實時的GET請求。它的類型默認為fixed,size默認為可用處理器的數量,隊列的size默認為1000。
bulk:此線程池用於批量操作。它的類型默認為fixed,size默認為可用處理器的數量,隊列的size默認為50。
percolate:此線程池用於預匹配器操作。它的類型默認為fixed,size默認為可用處理器的數量,隊列的size默認為1000。

 

三、線程池類型

1、cache

無限制的線程池,為每個請求創建一個線程

2、fixed

有着固定大小的線程池,大小由size屬性指定,允許你指定一個隊列(使用queue_size屬性指定)用來保存請求,直到有一個空閑的線程來執行請求。如果Elasticsearch無法把請求放到隊列中(隊列滿了),該請求將被拒絕

 

四、修改線程池配置

1、elasticsearch.yml

 

threadpool.index.type: fixed
threadpool.index.size: 100
threadpool.index.queue_size: 500

 

2、Rest API

 

curl -XPUT 'localhost:9200/_cluster/settings' -d '{
    "transient": {
        "threadpool.index.type": "fixed",
        "threadpool.index.size": 100,
        "threadpool.index.queue_size": 500
    }
}'

 

 

五、bulk異常排查

使用es bulk api時報錯如下

 

EsRejectedExcutionException[rejected execution(queue capacity 50) on.......]

這個錯誤明顯是默認大小為50的隊列(queue)處理不過來了,解決方法是增大bulk隊列的長度

 

elasticsearch.yml

 

threadpool.bulk.queue_size: 1000

 

 



相關文檔

https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM