在Windows中设置ES_HEAP_SIZE

我正在使用Windows 2012 R2机器。

我已经设置我的堆大小在环境variables如下ES_HEAP_SIZE 4g

设置堆大小后,我已经安装Elasticsearch作为Windows服务使用命令

service.bat install 

当我启动服务时,Elasticsearch服务已经正确占用了4GB(在Taskmanger.exe中检查)

一段时间后,elasticsearch服务使用的内存降到1 GB。

这是预期的吗?

这显然是Windows下ES的一个问题 。

从链接引用:

您在节点统计信息API中看到的4gb堆大小是通过设置ES_HEAP_SIZE(Xms)预留的虚拟内存量,即使禁用了bootstrap.mlockall,也是如此。

通过启用bootstrap.mlockall,我们期望调用VirtualLock()将工作集锁定到最初发生的物理内存(这是您在任务管理器中看到的内存),但最终会丢失。

对此我还没有一个明确的解释,但是我发现系统所承受的内存压力越大(即可用空间越少),发生“掉落”的速度就越快。 就好像Windows不尊重工作集中的页面被锁定的事实,并在资源不足时释放它们。

这里有很多信息,似乎表明VirtualLock不保证页面不会被交换,只是减少了可能性,但文档没有提到这一点。

1Gb是Elasticsearch的默认堆大小。 所以当你设置env.variable时,你设置了允许使用的最大内存量。 如果您不发出任何查询,内存使用情况可能会下降到默认值