elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java ElasticSearch-打开的文件太多

Java ElasticSearch-打开的文件太多,java,elasticsearch,Java,elasticsearch,我知道这是一个已知和讨论的问题,但我只想在这里得到尺寸: 我在一个Ubuntu服务器16.04节点(12核,256G内存)上运行ElasticSearch2.4。我已将ulimit增加到>130k(并通过_节点/stats/process进行验证) 我有两个索引,每个索引有10个碎片(因为多个节点将很快加入集群) 现在我正在使用多达900个并发Java TransportClient编写本文,这导致ElasticSearch服务器在几秒钟内崩溃,引发“打开的文件太多”异常 我是不是遗漏了什么?对

我知道这是一个已知和讨论的问题,但我只想在这里得到尺寸:

我在一个
Ubuntu服务器16.04节点(12核,256G内存)上运行
ElasticSearch2.4
。我已将
ulimit增加到>130k
(并通过_节点/stats/process进行验证)

我有两个索引,每个索引有10个碎片(因为多个节点将很快加入集群)

现在我正在使用多达900个并发Java TransportClient编写本文,这导致ElasticSearch服务器在几秒钟内崩溃,引发“打开的文件太多”异常


我是不是遗漏了什么?对于单个实例来说,900次并发写入是否太多而无法处理?还是10个碎片对于一个节点来说太多了?

结果如下:

  • 通过Java TransportClient连接会产生巨大的开销。它不使用HTTP REST API,而是使用ES二进制协议。(如上所述)
    • 通过TransportClient进行查询的速度明显快于通过REST进行查询的速度
    • TransportClient在客户端上创建一个线程池,到目前为止,该线程池是不可配置的。它将维护多个连接,以便连接节点,并能够处理故障转移、检索群集统计信息等。这将在客户端上造成相当大的长期负载
    • 在我们的例子中,每增加一个连接的TransportClient在ES机器上产生约1000个打开的文件描述符

我们切换到客户端,这大大减少了客户端和服务器上的负载。900个并发活动客户端现在会导致此节点上总共有多少个段文件?您的900个并发Java客户端与ES节点生活在同一台机器上?查找段数的查询:
GET/\u节点/stats/index?filter\u path=**.segments.count
和“max\u file\u descriptors”值反映了您在操作系统中设置的内容?远程客户端如何访问此集群?对每个打开的网络连接数感兴趣。。。这些不计入文件描述符的限制。例如,如果来自单个客户端的每个请求都是一个新连接,而该连接忘记关闭,那么您可能会遇到问题。。。那一定是正在打开的网络套接字?。。。我不明白为什么ES本身会为每个客户端访问打开约1000个文件描述符。