基于Elasticsearch5.4的常见问题总结

 更新时间:2018年01月06日 10:59:45   作者:我心自在  
下面小编就为大家分享一篇基于Elasticsearch5.4的常见问题总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近项目中用到了Elasticsearch5.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创建了很少的线程数,并且满足我们的开发需求,再也没有出现过内存溢出的问题了。

以上这篇基于Elasticsearch5.4的常见问题总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea中lombok启用的方法示例

    idea中lombok启用的方法示例

    这篇文章主要介绍了idea中lombok启用的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • SpringBoot+RabbitMQ方式收发消息的实现示例

    SpringBoot+RabbitMQ方式收发消息的实现示例

    这篇文章主要介绍了SpringBoot+RabbitMQ方式收发消息的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Springboot通过lucene实现全文检索详解流程

    Springboot通过lucene实现全文检索详解流程

    Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目,也是目前最为流行的基于 Java 开源全文检索工具包
    2022-06-06
  • 关于Java应用日志与Jaeger的trace关联的问题

    关于Java应用日志与Jaeger的trace关联的问题

    这篇文章主要介绍了Java应用日志如何与Jaeger的trace关联,通过jaeger发现这十次请求中有一次耗时特别长,想定位一下具体原因,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • Mybatis-Plus使用p6spy对SQL性能进行监控的方法

    Mybatis-Plus使用p6spy对SQL性能进行监控的方法

    这篇文章主要介绍了Mybatis-Plus使用p6spy对SQL性能进行监控的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Spring的Aware接口你知道多少

    Spring的Aware接口你知道多少

    这篇文章主要为大家详细介绍了Spring的Aware接口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Mybatis查询返回Map<String,Object>类型实例详解

    Mybatis查询返回Map<String,Object>类型实例详解

    这篇文章主要给大家介绍了关于Mybatis查询返回Map<String,Object>类型的相关资料,平时没太注意怎么用,今天又遇到了总结记录一下,方便以后处理此类问题,需要的朋友可以参考下
    2022-07-07
  • 详解全局事务注解@GlobalTransactional的识别

    详解全局事务注解@GlobalTransactional的识别

    这篇文章主要为大家介绍了详解全局事务注解@GlobalTransactional的识别源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java 入门图形用户界面设计之事件处理上

    Java 入门图形用户界面设计之事件处理上

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的事件处理
    2022-02-02
  • Spring Boot REST国际化的实现代码

    Spring Boot REST国际化的实现代码

    本文我们将讨论如何在现有的Spring Boot项目中添加国际化。只需几个简单的步骤即可实现Spring Boot应用的国际化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10

最新评论