ElasticSearch 优化总结

来源:互联网 发布:剑灵龙女完美女神数据 编辑:程序博客网 时间:2024/05/18 02:25

ElasticSearch 优化总结

目录

    • ElasticSearch 优化总结
    • 目录
      • OS
        • OS 参数说明
        • OS 参数配置
      • ES

Linux Release: CentOS release 6.4 
ES Version: 2.x

OS

OS 参数说明

vm.swappiness
  • 1
  • ES 推荐将此参数设置为 1,大幅降低 swap 分区的大小,强制最大程度的使用内存。

    注意,这里不要设置为 0, 这会很可能会造成 OOM。

net.core.somaxconn
  • 1
  • 定义了每个端口最大的监听队列的长度。
vm.max_map_count
  • 1
  • 限制一个进程可以拥有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。当 VMA 的数量超过这个值,OOM…
fs.file-max
  • 1
  • 设置 Linux 内核分配的文件句柄的最大数量。
user    soft     nofile             65535user    hard     nofile             65535
  • 1
  • 2
  • 设置具体用户可用的文件描述符数量。
user    soft     memlock          unlimiteduser    hard     memlock          unlimited
  • 1
  • 2
  • 锁定内存,拒绝 swapping
session required pam_limits.so
  • 1
  • 这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件
bootstrap.mlockall: true
  • 1
  • 运行JVM锁住内存,不让JVM写入swapping,避免降低ES的性能。
indices.fielddata.cache.size: 40%indices.cache.filter.size: 30%indices.cache.filter.terms.size: 1024mb
  • 1
  • 2
  • 3
  • 设置各部分所占用的缓存比例,默认是没有限制的,很可能会撑爆 JVM 堆空间(设置 fielddata 会影响搜索性能)。
threadpool.search.type: cachedthreadpool.search.size: 100threadpool.search.queue_size: 2000
  • 1
  • 2
  • 3
  • 线程池的设置, size 默认是 处理器核数的 5 倍。
transport.tcp.compress
  • 1
  • 设置所有节点间的传输数据是经过压缩的。默认不压缩。
ES_HEAP_SIZE
  • 1
  • 默认 1G,做好不要超过 32 G。

OS 参数配置

打开 sysctl.conf

vim /etc/sysctl.conf
  • 1
vm.swappiness=1                          # 关闭 swappingnet.core.somaxconn=65535                 # 上调端口的最大连接数vm.max_map_count=262144                  #(default) http://www.redhat.com/magazine/001nov04/features/vmfs.file-max=518144                       # http://www.tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap6sec72.html
  • 1
  • 2
  • 3
  • 4

如果不想重启,可以通过sysctl -p动态加载/etc/sysctl.conf文件,但建议这样做之前先清空swap。

然后,打开 limits.conf

vim /etc/security/limits.conf
  • 1

注意,下面这些配置要保证 elastic search 要能够访问到,所以强烈建议为 es 新创建一个用户,比如 elasticsearch

elasticsearch    soft    nofile          65535elasticsearch    hard    nofile          65535elasticsearch    soft    memlock         unlimitedelasticsearch    hard    memlock         unlimited
  • 1
  • 2
  • 3
  • 4

为了使以上参数永久生效,还要设置两个地方

vim /etc/pam.d/common-session-noninteractivevim /etc/pam.d/common-session
  • 1
  • 2

添加如下属性

session required pam_limits.so
  • 1

可能需要重启机器!

ES

打开 elasticsearch 的配置文件 elasticsearch.yml,添加如下属性

bootstrap.mlockall: truetransport.tcp.compress: trueindices.fielddata.cache.size: 40%indices.cache.filter.size: 30%indices.cache.filter.terms.size: 1024mbthreadpool:    search:        type: cached        size: 100        queue_size: 2000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

设置环境变量,最好在 ~/.bashrc,或者是 /etc/profile 下设置:

# 不要超过 32 Gexport ES_HEAP_SIZE=4g
  • 1
  • 2

设置完后,source 一下。重启机器。

重启完成后,查看 es 的信息:

curl 'http://localhost:9200/?pretty'
  • 1

优化完成。