百度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 } }