elasticsearch data to large 問題排查,內存佔用過高排查。

1:bulk隊列排查:

首先理解:線程池(pool有多種)-->>任務-->所有任務活躍的線程數

GET /_cat/thread_pool/<thread_pool>

GET /_cat/thread_pool

路徑參數編輯

<thread_pool>:這是線程池的類型,寫入,讀取,合併等操作對應的是不同的線程池

(可選,字符串)用於限制請求的線程池名稱的逗號分隔列表。接受通配符表達式。

查詢參數編輯

format

(可選,字符串)HTTP accept header的簡短版本 。有效值包括JSON,YAML等。

h

(可選,字符串)要顯示的以逗號分隔的列名稱列表。

如果您未指定要包括的列,則API將按以下列出的順序返回默認列。如果顯式指定一個或多個列,則僅返回指定的列。

有效列爲:

node_name

(默認)節點名稱,例如I8hydUG

name

(默認)線程池的名稱,例如analyzegeneric

active, a

(默認)當前線程池中的活動線程數。

queueq

(默認)當前線程池的隊列中的任務數。(比如我bulk的時候,每一個bulk就是一個任務)

rejected, r

(默認)線程池執行程序拒絕的任務數。

completed, c

線程池執行程序完成的任務數。

core, cr

當前線程池中允許的活動線程的已配置核心數。

ephemeral_ideid

臨時節點ID。

host, h

當前節點的主機名。

ip, i

當前節點的IP地址。

keep_alive, k

配置線程的存活時間。

largest, l

當前線程池中活動線程數最多。

max, mx

當前線程池中配置的最大活動線程數。

node_id, id

節點的ID,例如k0zy

pid, p

正在運行的節點的進程ID。

pool_size, psz

當前線程池中的線程數。

port, po

當前節點的綁定傳輸端口。

queue_size, qs

當前線程池的隊列中允許的最大任務數。

size, sz

當前線程池中配置的固定數量的活動線程。

type, t

線程池的類型。返回值是fixedscaling

help

(可選,布爾值)如果爲true,則響應包括幫助信息。默認爲false

local

(可選,布爾值)如果爲true,則請求僅從本地節點檢索信息。默認爲false,表示從主節點檢索信息。

master_timeout

(可選,時間單位)指定等待連接到主節點的時間段。如果在超時到期之前未收到任何響應,則請求將失敗並返回錯誤。默認爲30s

s

(可選,字符串)用於對響應進行排序的列名或列別名的逗號分隔列表。

size

(可選,大小單位)用於顯示數量的乘數。

v

(可選,布爾值)如果爲true,則響應包括列標題。默認爲false

 

1:  

GET _cat/thread_pool/

節點名稱   線程池名稱           

es2       write               6 0 0
es3       write               6 0 0
es5       snapshot            0 0 0
es3       search              0 0 0

因爲我的集羣在進行數據bulk因此我此時需要查詢我的bulk是否過多,導致內存熔斷


GET /_cat/thread_pool/write?h=node_name,name,queue,active,psz,qs


es2 write 0 4 16 1500
es4 write 0 7 16 1500
es3 write 1 7 16 1500
es5 write 0 5 16 1500
es1 write 0 0 16 1500

由此可見,集羣data too Large 不是bulk引起的!

2:排查segment memory

 

 

GET _cat/nodes?v&h=name,ip,port,segments.memory

 

由此可見,集羣上的segment.memory 很高,處理方式一般如下。

1:刪除不用的索引

2:close 不用的索引,用的時候可以打開

3:執行segment 合併  POST cdr-2019-6*/_forcemerge?max_num_segments=1

4:1 和2 釋放的內存更多,到這裏就完了,如果有需要請留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章