我们在弹性搜索实例上经常遇到“内存不足异常”。3台机器在具有类似配置的弹性搜索集群中。
环境:Windows Server 2012 R2 64 位操作系统。Ram:24gb 弹性搜索:6.3.2 JVM 堆大小(弹性搜索中的 jvm.options):-Xms16g -Xmx16g
我们已经尝试使用 2g (Xms2g & Xmx2g) 和 8g (Xms8g & Xmx8g) 来获得最小和最大堆大小,但最终还是出现了同样的错误。
并按照以下链接 https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html
我们尝试了 (Xms12g & Xmx12g) 的堆大小,即 24gb RAM 的 50%,但仍然失败。
[2018-09-14T04:14:37,545][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [Machine1] fatal error in thread [elasticsearch[Machine1][refresh][T#2]], exiting java.lang.OutOfMemoryError: Java heap space at org.apache.lucene.util.fst.BytesStore.writeByte(BytesStore.java:89) ~[lucene-core-7.3.1.jar:7.3.1 ae0705edb59eaa567fe13ed3a222fdadc7153680
- caomanhdat - 2018-05-09 09:27:24] at org.apache.lucene.util.fst.FST.<init>(FST.java:265) ~[lucene-core-7.3.1.jar:7.3.1 ae0705edb59eaa567fe13ed3a222fdadc7153680
- caomanhdat - 2018-05-09 09:27:24] at org.apache.lucene.util.fst.Builder.<init>(Builder.java:157) ~[lucene-core-7.3.1.jar:7.3.1 ae0705edb59eaa567fe13ed3a222fdadc7153680
- caomanhdat - 2018-05-09 09:27:24] at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$PendingBlock.compileIndex(BlockTreeTermsWriter.java:456) ~[lucene-core-7.3.1.jar:7.3.1 ae0705edb59eaa567fe13ed3a222fdadc7153680
- caomanhdat - …Run Code Online (Sandbox Code Playgroud) 示例代码:
Static void main(string[] args) { Class1 c1 = new Class1(); }
Class1 { Class1() { Class2 c2 = new Class2(); } }
Class2 { Class2() { Class1 c1 = new Class1(); } }
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出StackOverFlowException.这里我们以递归方式创建Class1&Class2对象.对象存储在堆中,那么它为什么不抛出HeapOversizedException或someotherException与堆相关?