Easticsearch以outofmemory停止

时间:2017-08-17 12:21:34

标签: elasticsearch elastic-stack

我们正在为我们的企业设置ELK,一切都已设置好。 硬件/软件配置如下:

总RAM - 192G JDK = Java HotSpot(TM)64位服务器VM

注入数据文件我们正在使用Logstash filebeat插件并且索引已正确构建,并且在我们收到以下错误之前,事情似乎正常工作

java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method) ~[?:1.8.0_144]
        at java.lang.Thread.start(Thread.java:717) ~[?:1.8.0_144]
        at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) ~[?:1.8.0_144]
        at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1025) ~[?:1.8.0_144]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) ~[?:1.8.0_144]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_144]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]

首先给人的印象是它可能是由-Xms-Xmx设置引起的,我们将其更改为20g

但问题仍然存在。 Elasticsearch正常启动,重建索引然后......

基于几个主题 - 我们尝试了以下内容:

  1. 将jvm.options文件中的Xss设置从1m更改为228k
  2. 将ulimit增加到65536
  3. 但是,似乎没有任何效果。

3 个答案:

答案 0 :(得分:1)

这与堆无关,正如错误消息所示,JVM无法创建本机操作系统线程。请确保通过ulimit可以启动新流程。

另一方面,这也可能显示配置错误(即错误配置的线程池试图产生太多线程)。

答案 1 :(得分:0)

您可以尝试将Xmx增加到30GB。还要在elasticsearch jvm上启用JMX来检查堆上消耗的空间是多少。

想知道你有多少指数以及这些指数占据多少磁盘空间?

答案 2 :(得分:0)

我同意它与堆大小无关,因为20g对于任何体面的应用程序来说已经足够了,而且错误显示unable to create new native thread

通过更改“最大用户进程”来解决问题(截至目前)从102465536