在默認情況下,彈性搜索告訴JVM使用最少和最大大小爲1 GB的堆。在遷移到生產環境時,配置堆大小是很重要的,以確保彈性搜索有足夠的堆可用。
彈性搜索將分配jvm中指定的整個堆。通過Xms(最小堆大小)和Xmx(最大堆大小)設置選項。
這些設置的值取決於服務器上可用RAM的數量。好的經驗法則是:
將最小堆大小(Xms)和最大堆大小(Xmx)設置爲相等。
彈性搜索的可用堆越多,它就可以用於緩存的內存越多。但是請注意,過多的堆會讓您長時間的垃圾收集暫停。
將Xmx設置爲不超過物理RAM的一半,以確保有足夠的物理RAM留給內核文件系統緩存。
不要將Xmx設置爲JVM用於壓縮對象指針(壓縮噢)的截止日期;確切的截止日期是不同的,但接近32 GB。您可以通過在日誌中查找一條線來驗證您是否處於限制之下:
heap size [1.9gb], compressed ordinary object pointers [true]
更好的是,儘量保持在零基壓縮的閾值以下;具體的截止日期是不同的,但是26 GB在大多數系統上是安全的,但是在某些系統上可以有30 GB的空間。您可以通過使用JVM選項來啓動彈性搜索來驗證您是否處於限制之下——XX:+unlock診斷-XX:+print壓縮sedoopsmode,並尋找如下的行:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
顯示了基於零的壓縮是啓用的而不是
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
下面是如何通過jvm設置堆大小的示例。選擇文件:
-Xms2g
也可以通過環境變量來設置堆大小。這可以通過在jvm中註釋Xms和Xmx設置來完成。選項文件並通過esjava選項設置這些值:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch