1.Linux参数调优:
1.禁用系统swap,编辑/etc/fstab文件并注释掉swap
2.修改系统资源限制
#单用户可以打开的最大文件数量,可以设置为官方推荐的65536或更大些
echo "* - nofile 655360">>/etc/security/limits.conf
#单用户内存地址空间
echo "* - as unlimited" >>/etc/security/limits.conf
#单用户线程数
echo "* - nproc 2056474" >>/etc/security/limits.conf
#单用户文件大小
echo "* - fsize unlimited" >>/etc/security/limits.conf
#单用户锁定内存
echo "* - memlock unlimited" >>/etc/security/limits.conf
#单进程可以使用的最大map内存区域数量
echo "vm.max_map_count = 655300" >>/etc/sysctl.conf
2.conf/elasticsearch.yml文件:
适当增大写入buffer和bulk队列长度,提高写入性能和稳定性
indices.memory.index_buffer_size: 15%
thread_pool.bulk.queue_size:1024
防止新建shard时扫描所有shard的元数据,提升shard分配速度
cluster.routing.allocation.disk.include_relocations: false
设置内存熔断参数,防止写入或查询压力过高导致OOM,具体数值可根据使用场景调整。
indices.breaker.total.limit: 30%
indices.breaker.request.limit: 6%
indices.breaker.fielddata.limit: 3%
调小查询使用的cache,避免cache占用过多的jvm内存,具体数值可根据使用场景调整。
indices.queries.cache.count: 500
indices.queries.cache.size: 5%
单机多节点时,主从shard分配以ip为依据,分配到不同的机器上,避免单机挂掉导致数据丢失。
cluster.routing.allocation.awareness.attributes: ip
核心数:processors配置参数的值决定了节点allocated_processors的参数值,而ES很多线程池的大小都是基于allocated_processors的值来计算的
node.processors: 48(在以下情况可以考虑调整该参数:在一台服务器部署多个ES实例,此时调整参数为处理器实际核心数一半;)
3.ES节点配置
jvm.options
-Xms和-Xmx设置为相同的值,推荐设置为机器内存的一半左右,剩余一半留给系统cache使用。
当机器内存大于64G时,遵循以下原则:
a. 如果主要的使用场景是全文检索, 那么建议给ES Heap分配 4~32G的内存即可;其它内存留给 *** 作系统, 供lucene使用(segments cache), 以提供更快的查询性能。
b. 如果主要的使用场景是聚合或排序, 并且大多数是numerics, dates, geo_points 以及not_analyzed的字符类型, 建议分配给ES Heap分配 4~32G的内存即可,其它内存留给 *** 作系统,供lucene使用(doc values cache),提供快速的基于文档的聚类、排序性能。
c. 如果使用场景是聚合或排序,并且都是基于analyzed 字符数据,这时需要更多的 heap size, 建议机器上运行多ES实例,每个实例保持不超过50%的ES heap设置(但不超过32G,堆内存设置32G以下时,JVM使用对象指标压缩技巧节省空间),50%以上留给lucene。
4.索引mapping和代码层优化(索引由开发通过应用配置创建,相关优化项在应用配置文件中已配置):
1.预热文件系统cache
"index.store.preload": ["nvd", "dvd"]
2.非查询字段不建立索引只做存储
3.索引字段类型选择优化
4.查询优化
查看所有索引:
curl -XGET -u "simcard:simcard123$%^" '10.2.37.30:9200/_cat/indices'
查看指定索引数据总量:
curl -XGET -u "simcard:simcard123$%^" '10.2.37.30:9200/indexName/_count'
查看es版本信息:
curl -XGET -u "simcard:simcard123$%^" -H "Content-Type: application/json" '10.2.24.50:9200'
删除索引:
curl -XDELETE -u "simcard:simcard123$%^" http://10.2.24.50:9200/simcard_test
创建索引:
curl -XPUT -u "simcard:simcard123$%^" -H "Content-Type: application/json" '10.2.24.50:9200/simcard_test' -d '
{
"settings":{
"number_of_shards":"5",
"number_of_replicas":"1",
"store":{"preload": "[nvd, dvd]"}
},
"mappings": {
"dynamic": "false",
"properties": {
"cardCreateTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"cardVersion": {
"type": "keyword"
},
"emptySN": {
"type": "keyword"
},
"iccid": {
"type": "keyword"
},
"id": {
"type": "keyword"
},
"seid": {
"type": "keyword"
},
"supplierCode": {
"type": "keyword"
},
"updateTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}
}'
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)