91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Elasticsearch5.4的常見問題總結

發布時間:2020-10-17 15:27:30 來源:腳本之家 閱讀:143 作者:我心自在 欄目:編程語言

最近項目中用到了Elasticsearch6.4(ES)是比較新的一個版本,使用的過程中出現了很多的問題,很是頭疼,但是問題最終還是解決掉了。

問題一:ESClient獲取慢,并且不能獲取Client:failed to create a child event loop

由于業務的需要沒上傳一批文件都要加一次ES索引,每加一次索引都要獲取連接然后操作,尤其是大批量的時候,獲取的次數顯然非常多,而且出現這個問題的主要原因在于我們在循環頻繁的操作ES,比如一批文件100個,我們就要獲取100次,為了降低ES Client獲取的時間,最終采取了一個方案,那就是在服務啟動的時候初始化連接,一次性獲取,然后在后邊直接調用,整個批次文件上傳完成后,最后添加ES索引,而不是一個文件一個文件的去添加了。這種方式顯然不需要每個批次都獲取連接,大大提升了執行效率。

首先,我們在服務啟動的時候,在啟動類中初始化靜態ES Client:

private static ElasticSearchUtil ElasticSearchUtil=new ElasticSearchUtil();
public static TransportClient client=ElasticSearchUtil.getClient();

然后在用到的時候直接調用:

Client client=Main.client;

這樣可以大大減少ES Client的連接次數,從而提升效率。

ES代碼如下:

public TransportClient getClient() {
String[] ipArr = configUtil.getValue("ESIP").split(",");
Settings settings = Settings.builder().put("thread_pool.generic.core",5)
    .put("thread_pool.generic.max", 10)
    .put("processors", 5)
    .put(Constants.ESCLUSTERNAME,configUtil.getValue("clusterName")).build();

TransportClient client = new PreBuiltTransportClient(settings);
for (String ip : ipArr) {
TransportAddress address = new InetSocketTransportAddress
  (InetAddresses.forString(ip),9300);
client.addTransportAddresses(address);
}
  return client;
}

問題2:內存溢出:java.lang.OutOfMemory:unable to create new native thread

在項目開發過程中,發生內存溢出是很讓人頭疼的一件事,在使用ES的過程中,就遇到了,而且很頻繁,尤其是在大批量壓力測試的時候根本進行不下去,從jvm內存調優方面想了很多辦法,沒有什么效果,問題依然得不到解決,最后在看源碼的時候,發現了一個原因,和報錯異常結合來看,這是由與ES在使用過程中,自動創建了大量的線程,超出了系統的容納量,所以導致了內存溢出,研究源碼的時候發現:ES創建的線程數是可以通過設置來控制的。下面是默認的ES創建線程數:

thread_pool.generic.core=默認值---4
thread_pool.generic.max=默認值--
min(512,max(4*processor數,128))
processor數=CPU的processor數

我們的CPU是10核40線程

從計算結果來看,如果使用默認值的話,ES可以創建的線程數是一個很大的數值,這遠遠超出了系統本身的容納數,主要是調整setting的數值,經過調整,我們將ES的默認值改變如下:

Settings settings = Settings.builder().put("thread_pool.generic.core",5)
.put("thread_pool.generic.max", 10)
.put("processors", 5)  .put(Constants.ESCLUSTERNAME,configUtil.getValue("clusterName")).build();
這是之前的
Settings settings = Settings.builder().put("thread_pool.generic.core",5)
.put(Constants.ESCLUSTERNAME,configUtil.getValue("clusterName")).build();

經過測試,ES創建了很少的線程數,并且滿足我們的開發需求,再也沒有出現過內存溢出的問題了。

以上這篇基于Elasticsearch6.4的常見問題總結就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山丹县| 亳州市| 汉沽区| 安康市| 德清县| 乐山市| 思南县| 昌江| 称多县| 玛多县| 河东区| 永清县| 安陆市| 淮北市| 边坝县| 平乡县| 靖江市| 临沧市| 华坪县| 游戏| 苍南县| 桓台县| 陆丰市| 雷山县| 阿合奇县| 克拉玛依市| 蒙城县| 商洛市| 汾西县| 罗田县| 宁化县| 西丰县| 南宫市| 涪陵区| 吴江市| 临夏市| 南陵县| 连南| 广州市| 廊坊市| 政和县|