ElasticSearch 优化总结
目录
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 65535
user hard nofile 65535
- 1
- 2
- 设置具体用户可用的文件描述符数量。
user soft memlock unlimited
user 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: cached
threadpool.search.size: 100
threadpool.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 # 关闭 swapping
net.core.somaxconn=65535 # 上调端口的最大连接数
vm.max_map_count=262144 #(default) http://www.redhat.com/magazine/001nov04/features/vm
fs.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 65535
elasticsearch hard nofile 65535
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
- 1
- 2
- 3
- 4
为了使以上参数永久生效,还要设置两个地方
vim /etc/pam.d/common-session-noninteractive
vim /etc/pam.d/common-session
- 1
- 2
添加如下属性
session required pam_limits.so
- 1
可能需要重启机器!
ES
打开 elasticsearch 的配置文件 elasticsearch.yml,添加如下属性
bootstrap.mlockall: true
transport.tcp.compress: true
indices.fielddata.cache.size: 40%
indices.cache.filter.size: 30%
indices.cache.filter.terms.size: 1024mb
threadpool:
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 G
export ES_HEAP_SIZE=4g
- 1
- 2
设置完后,source 一下。重启机器。
重启完成后,查看 es 的信息:
curl 'http://localhost:9200/?pretty'
- 1
优化完成。