在默认情况下,es认为你运行在开发环境,有些设置没有正确设置,则会记录一条提醒的日志。但是一旦你设置了network.host这样的高级设置,es则认为你运行在生产环境了,上面的提醒则会变成异常抛出。
[b]系统设置[/b]
设置最大文件打开数目
/etc/security/limits.conf 添加
[b]设置jvm堆内存[/b]
默认在jvm.options文件中设置jvm为2g内存。对于生产环境尽量重新设置内存占用大小。
1最小堆内存和最大堆内存要一致(否则在内存扩容会出现灾难性的等待)
2堆内存设置越大,则缓存的数据就越大,同样垃圾回收也会越耗时
3堆内存设置要少于机器总内存的一半,确保有足够内存就给系统使用
4注意内存设置上限。一般上限在32GB附近。具体可以查看日志(heap size [1.9gb], compressed ordinary object pointers [true])
5在大部分系统中内存使用小于26G是安全,当然在某些系统也可以使用30G,你可以确认你使用的内存在安全线之下,你可以在jvm参数中添加
如果出现如下日志则说明内存设置过大
[b]禁止交换空间[/b]
使用内存交换空间会导致垃圾回收时间长达分钟,并且导致请求变慢,甚至与集群失去连接。所以尽量要避免其出现。
第一种方法:
在文件
启动之后可以通过请求
对于大部分linux系统来说失败的主要原因是权限不够
对于zip,tar.gz解压缩文件可以在启动es前设置ulimit -l unlimited或者在文件/etc/security/limits.conf中设置memlock为unlimited
另一个原因可能是临时文件夹(/tmp)不具有执行权限,建议直接更换临时目录
第二种方法:
可以通过
window则
第三种方式
在linux中确认sysctl中的vm.swappiness值为1.在正常情况下减少核心对交换空间使用的倾向,但是在紧急情况下还是会使用
[b]文件描述符[/b]
对于linux和mac os来说需要设置文件操作符至少65536,如果是zip或者tar.gz包则需要在es启动前使用root设置ulimit -n 65536 或者设置nofile为65536.
查看es的最大文件操作符
[b]虚拟内存[/b]
es使用mmapfs来保存索引,但是默认的内存映射的数量太小,所以会导致内存溢出。在linux需要使用root账号执行
[b]线程数[/b]
确认es可以创建至少2048个线程。启动es前使用root账号执行ulimit -u 2048,或者在文件/etc/security/limits.conf设置nproc为2048。
[b]系统设置[/b]
设置最大文件打开数目
/etc/security/limits.conf 添加
elasticsearch - nofile 65536
[b]设置jvm堆内存[/b]
默认在jvm.options文件中设置jvm为2g内存。对于生产环境尽量重新设置内存占用大小。
1最小堆内存和最大堆内存要一致(否则在内存扩容会出现灾难性的等待)
2堆内存设置越大,则缓存的数据就越大,同样垃圾回收也会越耗时
3堆内存设置要少于机器总内存的一半,确保有足够内存就给系统使用
4注意内存设置上限。一般上限在32GB附近。具体可以查看日志(heap size [1.9gb], compressed ordinary object pointers [true])
5在大部分系统中内存使用小于26G是安全,当然在某些系统也可以使用30G,你可以确认你使用的内存在安全线之下,你可以在jvm参数中添加
-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode
并且查找一条日志heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
如果出现如下日志则说明内存设置过大
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
[b]禁止交换空间[/b]
使用内存交换空间会导致垃圾回收时间长达分钟,并且导致请求变慢,甚至与集群失去连接。所以尽量要避免其出现。
第一种方法:
在文件
config/elasticsearch.yml
中设置bootstrap.memory_lock: true
启动之后可以通过请求
GET _nodes?filter_path=**.mlockall
来验证。如果mlockall是false,则说明设置失败,你可能需要看更多的日志查看失败原因。对于大部分linux系统来说失败的主要原因是权限不够
对于zip,tar.gz解压缩文件可以在启动es前设置ulimit -l unlimited或者在文件/etc/security/limits.conf中设置memlock为unlimited
另一个原因可能是临时文件夹(/tmp)不具有执行权限,建议直接更换临时目录
第二种方法:
可以通过
sudo swapoff -a
临时禁止交换空间,或者编辑/etc/fstab
注释掉所有有swap
的行来永久禁止。window则
Properties → Advanced → Performance → Advanced → Virtual memory
。第三种方式
在linux中确认sysctl中的vm.swappiness值为1.在正常情况下减少核心对交换空间使用的倾向,但是在紧急情况下还是会使用
[b]文件描述符[/b]
对于linux和mac os来说需要设置文件操作符至少65536,如果是zip或者tar.gz包则需要在es启动前使用root设置ulimit -n 65536 或者设置nofile为65536.
查看es的最大文件操作符
GET _nodes/stats/process?filter_path=**.max_file_descriptors
[b]虚拟内存[/b]
es使用mmapfs来保存索引,但是默认的内存映射的数量太小,所以会导致内存溢出。在linux需要使用root账号执行
sysctl -w vm.max_map_count=262144
。如果想永久修改则修改文件/etc/sysctl.conf中的vm.max_map_count的值。重启后执行sysctl vm.max_map_count来验证成功[b]线程数[/b]
确认es可以创建至少2048个线程。启动es前使用root账号执行ulimit -u 2048,或者在文件/etc/security/limits.conf设置nproc为2048。