正文
indices.breaker.fielddata.limit
:10%,fielddata breaker限制,默认为jvm堆的60%。
https://www.elastic.co/guide/en/elasticsearch/reference/6.x/circuit-breaker.html
根据实际情况调整查询占用cache,避免查询cache占用过多的jvm内存,参数为静态的,需要在每个数据节点配置。indices.queries.cache.size: 5%,控制过滤器缓存的内存大小,默认为10%。接受百分比值,5%或者精确值,例如512mb。
https://www.elastic.co/guide/en/elasticsearch/reference/6.x/query-cache.html
如果集群规模较大,可以阻止新建shard时扫描集群内全部shard的元数据,提升shard分配速度。
cluster.routing.allocation.disk.include_relocations: false
,默认为true。
https://www.elastic.co/guide/en/elasticsearch/reference/6.x/disk-allocator.html
当前根据官方建议,选择匹配的jdk版本。
首先,-Xms和-Xmx设置为相同的值,避免在运行过程中再进行内存分配,同时,如果系统内存小于64G,建议设置略小于机器内存的一半,剩余留给系统使用。
同时,jvm heap建议不要超过32G(不同jdk版本具体的值会略有不同),否则jvm会因为内存指针压缩导致内存浪费,详见:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/heap-sizing.html
关闭交换分区,防止内存发生交换导致性能下降(部分情况下,宁死勿慢)
swapoff -a
Lucene 使用了 大量的 文件。同时,Elasticsearch 在节点和 HTTP 客户端之间进行通信也使用了大量的套接字,所有这一切都需要足够的文件描述符,默认情况下,linux默认运行单个进程打开1024个文件句柄,这显然是不够的,故需要加大文件句柄数 ulimit -n 65536。
https://www.elastic.co/guide/en/elasticsearch/reference/6.5/setting-system-settings.html
Elasticsearch 对各种文件混合使用了 NioFs( 注:非阻塞文件系统)和 MMapFs ( 注:内存映射文件系统)。
请确保你配置的最大映射数量,以便有足够的虚拟内存可用于 mmapped 文件。
这可以暂时设置:sysctl -w
vm.max_map_count=262144
或者你可以在
/etc/sysctl.conf
通过修改
vm.max_map_count
永久设置它。
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_file_descriptors_and_mmap.html