[转载] Elasticsearch 调优篇 03 - Elasticsearch 系统层面最全优化

【申明】这里启动 elasticsearch 用户名为:elastic

1、设置启动 elasticsearch 用户所持有的文件句柄数

vim /etc/security/limits.conf
# 在文件末尾增加以下内容
elastic soft memlock unlimited
elastic hard memlock unlimited

2、修改系统配置文件 /etc/sysctl.conf

vm.max_map_count = 262144
vm.swappiness = 1
net.core.somaxconn = 2048
# 使用以下命令使得新增加内容生效
sysctl -p

1. vm.max_map_count = 262144

Elasticsearch 默认采用 hybrid mmapfs / niofs 目录来保存索引。这个 mmap 就是我们所说的内存映射,应用比较广泛,主要作用就是减少用户态与内核态数据之间的拷贝,具体可参考:redis17- MMAP内存映射 与 零拷贝sendFile。默认的操作系统 mmap 数限制为:65530,这个数值太小了会导致内存溢出的异常。 新版 elasticsearch 在启动的时候要求最少为 262144, 所以需要更新 /etc/sysctl.conf 中的 vm.max_map_count = 262144

2. vm.swappiness = 1

Linux系统上可用,确保设置 vm.swappiness = 1(默认是 60)。这减少了内核交换的倾向即尽可能 降低 OS 将 elasticsearch 进程 swap 出去,设置 1 表示当整个系统可用内存只剩 1% 的时候不得不将改进程 swap 出去了,否则 os 就要死了,这就代表着一般情况不会发生这样的事情,但是极坏的情况下仍然允许在紧急条件下置换出去从而保证整个系统的稳定。

3. net.core.somaxconn = 2048

net.core.somaxconn 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为 128,限制了接收新 TCP 连接侦听队列的大小。对于一个经常处理新连接的高负载 web 服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 2048 或者更多。 服务进程会自己限制侦听队列的大小(例如 sendmail(8) 或者 Apache),常常在它们的配置文件中有设置队列大小的选项。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。

3、更大的堆内存

你希望更大的堆内存。你可以考虑一台机器上创建两个或者更多 ES 节点,而不要部署一个使用 32+GB 内存的节点。仍然要坚持 50% 原则,假设 你有个机器有 128G 内存,你可以创建两个 node,使用 31G(正常 Linux x64 系统最大最优内存大小也不会是 32GB,一般都是 31 多,所以为了使得性能最优,建议设置为 31GB 堆内存大小) 内存。也就是说 62G 内存给ES的堆内存,剩下的 62G 给Lucene。

作者:星火燎原智勇
原文链接:www.cnblogs.com/liang1101/p/131889...

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!