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
(默認)線程池的名稱,例如analyze
或generic
。
active
, a
(默認)當前線程池中的活動線程數。
queue
,q
(默認)當前線程池的隊列中的任務數。(比如我bulk的時候,每一個bulk就是一個任務)
rejected
, r
(默認)線程池執行程序拒絕的任務數。
completed
, c
線程池執行程序完成的任務數。
core
, cr
當前線程池中允許的活動線程的已配置核心數。
ephemeral_id
,eid
臨時節點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
線程池的類型。返回值是fixed
或scaling
。
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 釋放的內存更多,到這裏就完了,如果有需要請留言