Java堆大小比-Xmx大20倍 - 这怎么可能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java堆大小比-Xmx大20倍 - 这怎么可能?相关的知识,希望对你有一定的参考价值。

Elasticsearch实例在具有32核CPU和120GB内存的VM上运行。

当我为性能问题进行调试时发现htop的结果

Mem用法enter image description here

弹性搜索Java进程消耗52%的内存~60gb enter image description here

jstat结果

jstat -gc 11660
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
195904.0 195904.0  0.0   30111.4 1567680.0 1146433.0 59906496.0 1432277.9  73684.0 63888.5  0.0    0.0   2122077 150951.979   6      0.837 150952.816

-Xms2g-Xmx2g设置对于java进程清晰可见。

这怎么可能 ?内存使用情况如何超越-Xmx2g

答案

top和htop没有显示的是JVM堆的级别,它与Java进程消耗的总物理内存不同。

在下面,Lucene将索引段文件直接映射到内存而不利用堆。因此,在您的Java进程中,Elasticsearch本身可能会使用2GB堆,但底层Lucene库可能会占用更多内存,具体取决于需要加载到内存中的段的大小。

关于同一主题的另一个答案:https://stackoverflow.com/a/35232221/4604579

以上是关于Java堆大小比-Xmx大20倍 - 这怎么可能?的主要内容,如果未能解决你的问题,请参考以下文章

JVM内存设置

JVM内存设置多大合适?Xmx和Xmn如何设置?

JVM如何调优?

JVM XMX设置多大比较好,Docke容器里该怎么设置JVM呢@无界编程

jvm~xmx设置多少合适

如何设置一个非常大的 JVM 堆大小?