java - ElasticSearch - 打开的文件太多

标签 java elasticsearch

我知道这是一个已知且已讨论过的问题,但我只想在这里获取尺寸:

我在单个 Ubuntu Sever 16.04 节点(12 核,256G ram) 上运行 ElasticSearch 2.4。我已将 ulimit 增加到 > 130k(并通过 _nodes/stats/process 进行验证)。

我有两个索引,每个索引有 10 个分片(因为多个节点很快就会加入集群)。

现在,我正在使用多达 900 个并发 Java TransportClient 进行编写,这会导致 ElasticSearch 服务器在几秒钟内崩溃,并抛出“打开文件过多”异常。

我在这里遗漏了什么吗? 900 个并发写入对于单个实例来说是否太多而无法处理?或者对于一个节点来说 10 个分片是否太多了?

最佳答案

事实是这样的:

  • 通过 Java TransportClient 连接会产生巨大的开销。它不使用 HTTP REST API,而是使用 ES 二进制协议(protocol)。 (如所解释的 here )
    • 通过 TransportClient 进行的查询比通过 REST 进行的查询快得可以忽略不计。
    • TransportClient 在客户端上创建一个线程池,目前该线程池是不可配置的。它将维护多个连接,以便节点能够应对故障转移、检索集群统计信息等。这会导致客户端承受相当大的长期负载。
    • 在我们的例子中,每个额外连接的 TransportClient 都会在 ES 计算机上生成约 1000 个打开的文件描述符。

我们切换到Jest客户端显着减少了客户端和服务器的负载。现在,900 个并发 Activity 客户端会在服务器上产生 <2000 个文件描述符。

感谢Andrei Stefan为我们指明了正确的方向。

关于java - ElasticSearch - 打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40174698/

相关文章:

java - 将一个对象复制到另一个对象在 java 中产生不同的结果

java - 安卓 GCM : different way of handling push depending on whether the app is visible or not

elasticsearch - 无法开始 Elasticsearch

java - Hazelcast 类路径错误

Java应用程序和高可用性

java - SharedPreferences.Editor NPE

ubuntu - 无法从主机操作系统访问 Vagrant VM 中的 Elasticsearch 2.0

elasticsearch - 爬虫+elasticsearch整合

docker - docker-compose down, up, stop 中抛出错误。 (命名卷 X 在服务 Y 中使用,但在卷部分中未找到声明。)

elasticsearch - 如何使ElasticSearch拒绝不存在的 parent 的 child 索引尝试?