欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Elasticsearch5.4的常見問題總結(jié)

 更新時(shí)間:2018年01月06日 10:59:45   作者:我心自在  
下面小編就為大家分享一篇基于Elasticsearch5.4的常見問題總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

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

首先,我們在服務(wù)啟動(dòng)的時(shí)候,在啟動(dòng)類中初始化靜態(tài)ES Client:

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

然后在用到的時(shí)候直接調(diào)用:

Client client=Main.client;

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

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:內(nèi)存溢出:java.lang.OutOfMemory:unable to create new native thread

在項(xiàng)目開發(fā)過程中,發(fā)生內(nèi)存溢出是很讓人頭疼的一件事,在使用ES的過程中,就遇到了,而且很頻繁,尤其是在大批量壓力測試的時(shí)候根本進(jìn)行不下去,從jvm內(nèi)存調(diào)優(yōu)方面想了很多辦法,沒有什么效果,問題依然得不到解決,最后在看源碼的時(shí)候,發(fā)現(xiàn)了一個(gè)原因,和報(bào)錯(cuò)異常結(jié)合來看,這是由與ES在使用過程中,自動(dòng)創(chuàng)建了大量的線程,超出了系統(tǒng)的容納量,所以導(dǎo)致了內(nèi)存溢出,研究源碼的時(shí)候發(fā)現(xiàn):ES創(chuàng)建的線程數(shù)是可以通過設(shè)置來控制的。下面是默認(rèn)的ES創(chuàng)建線程數(shù):

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

我們的CPU是10核40線程

從計(jì)算結(jié)果來看,如果使用默認(rèn)值的話,ES可以創(chuàng)建的線程數(shù)是一個(gè)很大的數(shù)值,這遠(yuǎn)遠(yuǎn)超出了系統(tǒng)本身的容納數(shù),主要是調(diào)整setting的數(shù)值,經(jīng)過調(diào)整,我們將ES的默認(rèn)值改變?nèi)缦拢?/p>

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();

經(jīng)過測試,ES創(chuàng)建了很少的線程數(shù),并且滿足我們的開發(fā)需求,再也沒有出現(xiàn)過內(nèi)存溢出的問題了。

以上這篇基于Elasticsearch5.4的常見問題總結(jié)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java傳入用戶名和密碼并自動(dòng)提交表單實(shí)現(xiàn)登錄到其他系統(tǒng)的實(shí)例代碼

    Java傳入用戶名和密碼并自動(dòng)提交表單實(shí)現(xiàn)登錄到其他系統(tǒng)的實(shí)例代碼

    這篇文章主要介紹了Java傳入用戶名和密碼并自動(dòng)提交表單實(shí)現(xiàn)登錄到其他系統(tǒng),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01
  • SpringBoot整合郵件發(fā)送的四種方法

    SpringBoot整合郵件發(fā)送的四種方法

    這篇文章主要介紹了SpringBoot整合郵件發(fā)送的四種方法,SpringBoot中集成了發(fā)送郵件的功能,本文做了進(jìn)一步優(yōu)化,需要的朋友可以參考下
    2023-03-03
  • 詳解Java編程中的策略模式

    詳解Java編程中的策略模式

    這篇文章主要介紹了詳解Java編程中的策略模式,以及用策略模式來分析源碼等內(nèi)容,需要的朋友可以參考下
    2015-08-08
  • java 內(nèi)嵌Groovy動(dòng)態(tài)腳本操作

    java 內(nèi)嵌Groovy動(dòng)態(tài)腳本操作

    這篇文章主要介紹了java 內(nèi)嵌Groovy動(dòng)態(tài)腳本操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解Spring中Lookup注解的使用

    詳解Spring中Lookup注解的使用

    我們知道在spring容器中單獨(dú)的一個(gè)抽象類是不能成為一個(gè)bean的,那么有沒有辦法呢?這個(gè)時(shí)候我們可以使用Lookup注解,下面跟隨小編看下Spring中Lookup注解的使用
    2021-10-10
  • springboot整合shiro登錄失敗次數(shù)限制功能的實(shí)現(xiàn)代碼

    springboot整合shiro登錄失敗次數(shù)限制功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了springboot整合shiro-登錄失敗次數(shù)限制功能,實(shí)現(xiàn)此功能如果是防止壞人多次嘗試,破解密碼的情況,所以要限制用戶登錄嘗試次數(shù),需要的朋友可以參考下
    2018-09-09
  • Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法

    Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法

    MDC(Mapped Diagnostic Contexts)映射診斷上下文,該特征是logback提供的一種方便在多線程條件下的記錄日志的功能,這篇文章主要介紹了Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法,需要的朋友可以參考下
    2024-04-04
  • Spring AOP源碼深入分析

    Spring AOP源碼深入分析

    這篇文章主要介紹了Spring AOP源碼,AOP(Aspect Orient Programming),直譯過來就是 面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充
    2023-01-01
  • SpringMVC---配置與使用的示例

    SpringMVC---配置與使用的示例

    這篇文章主要介紹了SpringMVC---配置與使用的示例,幫助大家更好的理解和學(xué)習(xí)spring框架,感興趣的朋友可以了解下
    2020-10-10
  • Solr通過特殊字符分詞實(shí)現(xiàn)自定義分詞器詳解

    Solr通過特殊字符分詞實(shí)現(xiàn)自定義分詞器詳解

    最近因?yàn)楣ぷ鞯男枰?,要做一個(gè)分詞器,通過查找相關(guān)的資料最終用solr實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于Solr通過特殊字符分詞實(shí)現(xiàn)自定義分詞器的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-09-09

最新評論