ES为什么限制内存小于32G,为什么小于系统内容的50%
ES为什么内存最好小于32GES是用java开发的java32位虚拟机的寻址最大4G,64位理论上来说无限大,请参考java Object的header结构。但是实际上64位的地址指针会导致一下问题:增加了GC开销:64位对象引用需要占用更多的堆空间,留给其他数据的空间将会减少, 从而加快了GC的发生,更频繁的进行GC。降低CPU缓存命中率:64位对象引用增大了,CPU能缓存的oop将会更少,从而
·
ES为什么内存最好小于32G
ES是用java开发的
java32位虚拟机的寻址最大4G,64位理论上来说无限大,请参考java Object的header结构。
但是实际上64位的地址指针会导致一下问题:
- 增加了GC开销:64位对象引用需要占用更多的堆空间,留给其他数据的空间将会减少, 从而加快了GC的发生,更频繁的进行GC。
- 降低CPU缓存命中率:64位对象引用增大了,CPU能缓存的oop将会更少,从而降低了CPU缓存的效率。
指针压缩技术可以解决这个问题,请参考
JAVA指针压缩的实现原理
指针压缩技术支持的理论最大内存为32G,但是最好小于这个值.
超过这个值会导致指针压缩技术失效,会导致指针变成普通指针(64位),速度变慢了。
ES限制这个小于32G就是这个原因,超过就效率变差了。
如果你的电脑内存大,可以开多个数据节点,但是这会导致另外一个问题,操作系统文件句柄个数是有限的,多个ES会争抢系统资源,总之一句话,还是要根据实际情况来选择你的配置。
ES内存为什么要占系统内容的50%
ES是用java开发的,底层是Lucene
ES内存中的内容会在lucene中也缓存一份,如果ES占的太大,lucene就需要把数据存到硬盘上
可以想象,当前情况下,硬盘io是速度最大的瓶颈。
更多推荐
已为社区贡献1条内容
所有评论(0)