设置
默认安装后设置的堆内存是 1 GB。两种方式修改 Elasticsearch 的堆内存:
指定 ES_HEAP_SIZE 环境变量:
export ES_HEAP_SIZE=10g
通过命令行参数的形式:
./bin/elasticsearch -Xmx10g -Xms10g
不需要对分词字符串做聚合计算(例如,不需要 fielddata )可以考虑降低堆内存。堆内存越小,Elasticsearch(更快的 GC)和 Lucene(更多的内存用于缓存)的性能越好。
内存指针压缩
VM 在内存小于 32 GB 的时候会采用一个内存指针压缩技术。
遗憾的是,这需要看情况。确切的划分要根据 JVMs 和操作系统而定。 如果你想保证其安全可靠,设置堆内存为 31 GB 是一个安全的选择。
防止同一个分片(shard)的主副本存在同一个物理机上,修改配置文件:
cluster.routing.allocation.same_shard.host: true
禁用 swap
- 暂时禁用:
sudo swapoff -a
永久禁用,需要修改 /etc/fstab 文件
- 不打算完全禁用 swap,也可以选择降低 swappiness 的值
swappiness 设置为 1 比设置为 0 要好,因为在一些内核版本 swappiness 设置为 0 会触发系统 OOM-killer(注:Linux 内核的 Out of Memory(OOM)killer 机制)vm.swappiness = 1
echo "vm.swappiness = 1">> /etc/sysctl.conf
sysctl -p
- JVM 锁住内存,禁止操作系统交换出去,修改配置文件 elasticsearch.yml
bootstrap.mlockall: true