设置

默认安装后设置的堆内存是 1 GB。两种方式修改 Elasticsearch 的堆内存:

  • 指定 ES_HEAP_SIZE 环境变量:

    1. export ES_HEAP_SIZE=10g
  • 通过命令行参数的形式:

    1. ./bin/elasticsearch -Xmx10g -Xms10g

    不需要对分词字符串做聚合计算(例如,不需要 fielddata )可以考虑降低堆内存。堆内存越小,Elasticsearch(更快的 GC)和 Lucene(更多的内存用于缓存)的性能越好。

    内存指针压缩

    VM 在内存小于 32 GB 的时候会采用一个内存指针压缩技术。
    遗憾的是,这需要看情况。确切的划分要根据 JVMs 和操作系统而定。 如果你想保证其安全可靠,设置堆内存为 31 GB 是一个安全的选择。

防止同一个分片(shard)的主副本存在同一个物理机上,修改配置文件:

  1. cluster.routing.allocation.same_shard.host: true

禁用 swap

  1. 暂时禁用:

sudo swapoff -a
永久禁用,需要修改 /etc/fstab 文件

  1. 不打算完全禁用 swap,也可以选择降低 swappiness 的值
    1. vm.swappiness = 1
    2. echo "vm.swappiness = 1">> /etc/sysctl.conf
    3. sysctl -p
    swappiness 设置为 1 比设置为 0 要好,因为在一些内核版本 swappiness 设置为 0 会触发系统 OOM-killer(注:Linux 内核的 Out of Memory(OOM)killer 机制)
  1. JVM 锁住内存,禁止操作系统交换出去,修改配置文件 elasticsearch.yml
    1. bootstrap.mlockall: true