ElasticSearch 效能優化

2021-09-02 13:31:34 字數 1130 閱讀 6532

getrace系統的所有搜尋都是用elasticsearch來做的,在使用elasticsearch的過程中碰到了一些問題,這裡記錄一下。

一 . 在查詢呼叫鏈的時候。整體資料量大(每天60g * 7 = 420g),但是結果集比較少(只有幾百行)的時候,查詢時間經常會超過1分鐘,慢的甚至需要5,6分鐘.

優化1:經過深入測試發現,是因為batchsize設定過大(一開始設定為integer.max),具體原因還未分析過

searchrequestbuilder searchrequestbuilder = client.preparesearch(indices).settypes(type)

.setquery(builderquerybuilder(matches)).setsearchtype(searchtype).setscroll(new timevalue(500000)).setsize(batchsize);

優化2:業務上做優化,原先查詢呼叫鏈的時候是查詢所有日誌的,現在設定為預設查詢當天日誌,如果當天日誌查不到,再查詢所有日誌。這樣查詢當天的呼叫鏈的時候都是非常快的

優化後大部分查詢都在30秒以內

二. 在查詢應用的介面呼叫分析資料時,如果搜尋的時間跨度

很長,並且資料是一次性讀入到記憶體,這樣就可能會出現記憶體不夠的情況

優化1: 為了解決這個問題,採用了分批查詢介面,每次查詢500條資料,因為業務上需要對日誌做排序,在查詢的時候需要在查詢介面上新增排序引數

三. 隨著呼叫鏈日誌量的增多,經常會出現redis日誌堆積的情況。呼叫鏈日誌寫入el的速度在2000-3000行每秒。 

經過分析,堆積的原因可能在兩方面,一是el集群本身效能需要優化,二是logstash寫入el時可能發生了阻塞。

優化1:修改了el的配置,讓el重新整理日誌的時間變為30分鐘

優化2:通過日誌分析logstash經常會出現full gc,因為日誌在流過logstash的時候,會建立很多臨時物件,如果年輕代過小的話,會導致年輕代很快就被塞滿,從發生yong gc,多次yong gc之後,本來是很快就會被釋放的臨時變數也會被遷移到年老代。導致年老代頻繁被塞滿,從而經常發生full gc。解決的辦法是調大年輕代的比例,讓臨時變數在年輕代盡量多保留一段時間,這樣當yong gc的時候就可以釋放掉很多臨時變數。

elasticsearch效能優化

elasticsearch查詢依賴作業系統的頁面快取記憶體 file system cache 因此除了需要給elasticsearch的jvm分配足夠的記憶體以外,還需要給頁快取預留記憶體。例如單機32g記憶體,給jvm配置16g記憶體後,剩餘16g預留記憶體不需要額外配置,也不要讓其他程序占用這...

ElasticSearch效能優化策略

一 伺服器部署演算法的基本思想 1 增加1 2臺伺服器,用於負載均衡節點 elasticsearch的配置檔案中有2個引數 node.master和node.data。這兩個參 數搭配使用時,能夠幫助提供伺服器效能。1.1 node.master false node.data true 該node...

ElasticSearch效能優化策略

elasticsearch效能優化主要分為4個方面的優化。一 伺服器部署 1 增加1 2臺伺服器,用於負載均衡節點 elasticsearch的配置檔案中有2個引數 node.master和node.data。這兩個參 數搭配使用時,能夠幫助提供伺服器效能。1.1 node.master false...