[15]es線程池的優(yōu)化

本文集主要是總結(jié)自己在項(xiàng)目中使用ES 的經(jīng)驗(yàn)教訓(xùn),包括各種實(shí)戰(zhàn)和調(diào)優(yōu)呜师。


查看當(dāng)前線程狀態(tài)

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

上面截取了部分線程池的配置框杜,其中,最需要關(guān)注的是rejected踱蠢。當(dāng)某個(gè)線程池active==threads時(shí)火欧,表示所有線程都在忙,那么后續(xù)新的請求就會(huì)進(jìn)入queue中,即queue>0苇侵,一旦queue大小超出限制离陶,如bulk的queue默認(rèn)50,那么elasticsearch進(jìn)程將拒絕請求(碰到bulk HTTP狀態(tài)碼429)衅檀,相應(yīng)的拒絕次數(shù)就會(huì)累加到rejected中招刨。

解決方法

1、記錄失敗的請求并重發(fā)
2哀军、減少并發(fā)寫的進(jìn)程個(gè)數(shù)沉眶,同時(shí)加大每次bulk請求的size


ES核心線程池:

5.x以后 thread_pool有變化,取消了cached線程池類型杉适。ES針對index谎倔、bulk、get猿推、search片习、refresh等操作使用不同的線程池。根據(jù)自己的業(yè)務(wù)場景蹬叭,可以對線程池進(jìn)行調(diào)優(yōu)藕咏。

generic:通用操作,如node discovery秽五。它的類型默認(rèn)為scaling孽查。5.x以后取消了cached類型

index:此線程池用于索引和刪除操作。它的類型默認(rèn)為fixed坦喘,size默認(rèn)為可用處理器的數(shù)量俄烁,隊(duì)列的size默認(rèn)為200绰精,最大線程池大小是可用處理器+1

search:此線程池用于搜索和計(jì)數(shù)請求汁针。它的類型默認(rèn)為fixed碗旅,size默認(rèn)為(可用處理器的數(shù)量* 3) / 2) + 1,隊(duì)列的size默認(rèn)為1000棠笑。

get:此線程池用于實(shí)時(shí)的GET請求梦碗。它的類型默認(rèn)為fixed,size默認(rèn)為可用處理器的數(shù)量腐晾,隊(duì)列的size默認(rèn)為1000叉弦。

bulk:此線程池用于批量操作。它的類型默認(rèn)為fixed藻糖,size默認(rèn)為可用處理器的數(shù)量淹冰,隊(duì)列的size默認(rèn)為200。

percolate:此線程池用于預(yù)匹配器操作巨柒。它的類型默認(rèn)為fixed樱拴,size默認(rèn)為可用處理器的數(shù)量柠衍,隊(duì)列的size默認(rèn)為1000。

snaphot:For snapshot/restore operations. Thread pool type is scaling with a keep-alive of 5m and a max ofmin(5, (# of available processors)/2).

warmer:For segment warm-up operations. Thread pool type is scaling with a keep-alive of 5m and a max ofmin(5, (# of available processors)/2).

refresh:For refresh operations. Thread pool type is scaling with a keep-alive of 5m and a max of min(10, (# of available processors)/2).

listener:Mainly for java client executing of action when listener threaded is set to true. Thread pool type isscaling with a default max of min(10, (# of available processors)/2).


線程池類型:

1晶乔、cached 5.x以后取消了cached類型

無限制的線程池珍坊,為每個(gè)請求創(chuàng)建一個(gè)線程。這種線程池是為了防止請求被阻塞或者拒絕正罢,其中的每個(gè)線程都有一個(gè)超時(shí)時(shí)間(keep_alive)阵漏,默認(rèn)5分鐘,一旦超時(shí)就會(huì)回收/終止翻具。elasticsearch的generic線程池就是用該類型履怯。發(fā)現(xiàn)在5.0.0-alpha2版本中去掉了該類型的線程池。

2裆泳、fixed

有著固定大小的線程池叹洲,大小由size屬性指定,默認(rèn)是5*cores數(shù)工禾,允許你指定一個(gè)隊(duì)列(使用queue_size屬性指定运提,默認(rèn)是-1,即無限制)用來保存請求闻葵,直到有一個(gè)空閑的線程來執(zhí)行請求民泵。如果Elasticsearch無法把請求放到隊(duì)列中(隊(duì)列滿了),該請求將被拒絕笙隙。

threadpool:  
    index:  
        size: 30  
        queue_size: 1000  

3洪灯、scaling:

可變大小的pool坎缭,大小根據(jù)負(fù)載在1到size間竟痰,同樣keep_alive參數(shù)指定了閑置線程被回收的時(shí)間。

threadpool:  
     warmer:  
         size: 8  
         keep_alive: 2m  

修改線程池配置:

1.通過elasticsearch.yml文件進(jìn)行修改

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時(shí)報(bào)錯(cuò)如下

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

這個(gè)錯(cuò)誤明顯是默認(rèn)大小為50的隊(duì)列(queue)處理不過來了掏呼,解決方法是增大bulk隊(duì)列的長度但是會(huì)導(dǎo)致cpu消耗高或者降低并發(fā)量也可以采用重試的機(jī)制坏快,捕獲EsRejectedExcutionException異常,然后重新執(zhí)行上一次的操作憎夷。

配置方法:

elasticsearch.yml 中添加  threadpool.bulk.queue_size: 1000  

類似的配置寫法如下:

elasticserch.yml:

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

通過restAPI設(shè)置:

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

Elasticsearch的線程池其實(shí)就是對Java自帶的進(jìn)行封裝莽鸿,雖然用戶可以更改相關(guān)配置,但官方強(qiáng)烈不建議去修改默認(rèn)值,在項(xiàng)目的實(shí)際使用中拾给,我們也是對es的bulk線程配置做了調(diào)整祥得。主要是通過type、queue_size蒋得、reject_policy來優(yōu)化性能


參考鏈接:http://rockelixir.iteye.com/blog/1890867

官網(wǎng)關(guān)于thread_pool的鏈接:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/modules-threadpool.html#processors

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末级及,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子额衙,更是在濱河造成了極大的恐慌饮焦,老刑警劉巖怕吴,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異县踢,居然都是意外死亡转绷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門硼啤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來议经,“玉大人,你說我怎么就攤上這事谴返“忠担” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵亏镰,是天一觀的道長扯旷。 經(jīng)常有香客問我,道長索抓,這世上最難降的妖魔是什么钧忽? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮逼肯,結(jié)果婚禮上耸黑,老公的妹妹穿的比我還像新娘。我一直安慰自己篮幢,他們只是感情好大刊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著三椿,像睡著了一般缺菌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搜锰,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天伴郁,我揣著相機(jī)與錄音,去河邊找鬼蛋叼。 笑死焊傅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狈涮。 我是一名探鬼主播狐胎,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歌馍!你這毒婦竟也來了握巢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤骆姐,失蹤者是張志新(化名)和其女友劉穎镜粤,沒想到半個(gè)月后捏题,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肉渴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年公荧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片同规。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡循狰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出券勺,到底是詐尸還是另有隱情绪钥,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布关炼,位于F島的核電站程腹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏儒拂。R本人自食惡果不足惜寸潦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望社痛。 院中可真熱鬧见转,春花似錦、人聲如沸蒜哀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撵儿。三九已至乘客,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間统倒,已是汗流浹背寨典。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留房匆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓报亩,卻偏偏與公主長得像浴鸿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子弦追,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348