一:硬件方面

 
在预算充足的情况下。特别是一些高并发业务的搜索。硬件层面占用整个elasticsearch性能空间很大比例。
1)内存:
单实例的情况下,尽量分配32G,排序和统计都是以及内存计算的。
2)硬盘:

在条件允许下,尽量使用一些高性能io的硬盘,SSD

3)CPU:

在高并发的情况下,cpu的计算能力要求就很高了。cpu配置尽量高。

4)网络:
当然这个越大越好。。毕竟服务交互通过http 。网络传输是个很重要的因数
 

二:OS 系统优化。

 
1)选择CentOS 64位操作系统

CentOS6.5/6.6/6.7         7以上系统有很大改变,建议稳定后采用。

2)设置最大文件打开数

ulimit -a  查看    
ulimit -SHn 65535     s 代表软件资源,n代表硬件资源  系统重启之后恢复默认
/etc/security/limits.conf    添加 * - nofile 65535

3)优化相关内核参数

查看当前TCP连接数:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘

 

三:软件层面

 

1)优化GC,减少GC时间。

  因为gc时会使jvm停止工作,如果某个节点gc时间过长,master ping3次(zen discovery默认ping失败重试3次)不通后就会把该节点剔除出集群,从而导致索引进行重新分配。解决办法:(1)优化gc,减少gc时间。(2)调大zen discovery的重试次数(es参数:ping_retries)和超时时间(es参数:ping_timeout)。后来发现根本原因是有个节点的系统所在硬盘满了。导致系统性能下降
2)索引层面
按着分词效率和业务契合度的 分词器。。优化segment。
3)分片
按着自己的业务需求控制shard数量,shard过多,交互多。。shard过少,单个分片数据容易累积,当单个分片的数据超过30G的时
候就有性能下降的情况,当超过50G的时候,就有明显性能下降的效果。。采用热分离:当数据大小即将超过30G的时候。可以把以前的 数据 转存到其他容器里面去。比如hdfs。
4)副本:副本太多性能下降
5)查询缓存(打分走query,不打分就filter)
 
 因为默认情况下es对字段数据缓存(Field Data Cache)大小是无限制的,查询时会把字段值放到内存,特别是facet查询,对内存要求非常高,它会把结果都放在内存,然后进行排序等操作,一直使用内存,直到内存用完,当内存不够用时就有可能出现out of memory错误。
解决方法:
(1)设置es的缓存类型为Soft Reference,它的主要特点是据有较强的引用功能。只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。另外,这些引 用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null。它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory。在es的配置文件加上index.cache.field.type: soft即可。
(2)设置es最大缓存数据条数和缓存失效时间,通过设置index.cache.field.max_size: 50000来把缓存field的最大值设置为50000,设置index.cache.field.expire: 10m把过期时间设置成10分钟。
6)锁住ES内存
Es在内存不够JVM开启swapping的时候,表现得会很差,所以为了避免这个问题,将该属性设为true,表示锁定es所使用的内存:
bootstrap.mlockall: true
 
7)query优化。为高并发查询提供过滤器缓存和字段缓存
  1. 一般情况下。尽量使用filter。。
  2. 过滤器不影响评分,而query得分查询会让搜索变的更加复杂,需要更多的cpu资源。
  3. 过滤查询相对于比较简单的操作,由于过滤应用整个索引的内容上,过滤器很容易被缓存
  4. 尽量使用filtered查询,可以把整个query都套在filtered中,这种效率会更快。(过滤发生在查询之前!!)
  5. 复杂的组合过滤查询尽量用bool查询,不带bool的查询 不能利用缓存
  6. 设置search_type 类型:
demo:
# 嵌套查询
# SELECT document FROM products WHERE productID = "SD1002136" OR ( productID = "SD4535233" AND price = 30 )

    1. {
    2. "query": {
    3. "filtered": {
    4. "query": {
    5. "match_all": {
    6. }
    7. }"filter": {
    8. "bool": {
    9. "should": [{
    10. "term": {
    11. "productID": "SD1002136"
    12. }
    13. },
    14. {
    15. "must": [{
    16. "term": {
    17. "productID": "SD4535233"
    18. }
    19. },
    20. {
    21. "term": {
    22. "price": 30
    23. }
    24. }]
    25. }]
    26. }
    27. }
    28. }
    29. }
    30. }

转载:http://blog.csdn.net/hu948162999/article/details/51381717

 

elasticsearch性能因素总结的更多相关文章

  1. ElasticSearch性能优化策略【转】

    ElasticSearch性能优化主要分为4个方面的优化. 一.服务器部署 二.服务器配置 三.数据结构优化 四.运行期优化 一.服务器部署 1.增加1-2台服务器,用于负载均衡节点 elasticS ...

  2. UI 性能因素考虑

    浏览器的最大并发连接数一般在4到6之间,首先了解影响加载的性能因素: (1)下载的文件太大 (2)发出的请求太多 (3)请求相应不及时 针对这些因素,一般会考虑减少请求次数: (1)对静态文件设置缓存 ...

  3. ElasticSearch 2 (12) - Shard数调优(ElasticSearch性能)

    ElasticSearch 2 (12) - Shard数调优(ElasticSearch性能) 摘要 当创建一个索引的时候,我们经常会面对一个问题:要为索引分配多少个shard?多少个replica ...

  4. ElasticSearch 2 (11) - 节点调优(ElasticSearch性能)

    ElasticSearch 2 (11) - 节点调优(ElasticSearch性能) 摘要 一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下 ...

  5. 亿级 Elasticsearch 性能优化

    前言 最近一年使用 Elasticsearch 完成亿级别日志搜索平台「ELK」,亿级别的分布式跟踪系统.在设计这些系统的过程中,底层都是采用 Elasticsearch 来做数据的存储,并且数据量都 ...

  6. elasticsearch性能调优

    转载 http://www.cnblogs.com/hseagle/p/6015245.html 该es调优版本可能有低,但是思想主体不变,不合适的参数可以自己找最新的版本相应的替代,或者增删 ela ...

  7. ESRally压测ElasticSearch性能 CentOS 7.5 安装 Python3.7

    1,CentOS 7.5 安装 Python3.7 1.安装开发者工具 yum -y groupinstall "Development Tools"2.安装Python编译依赖包 ...

  8. 分布式搜索引擎Elasticsearch性能优化与配置

    1.内存优化 在bin/elasticsearch.in.sh中进行配置 修改配置项为尽量大的内存: ES_MIN_MEM=8g ES_MAX_MEM=8g 两者最好改成一样的,否则容易引发长时间GC ...

  9. ElasticSearch性能优化官方建议

    ES 手册 如何提高ES的性能 不要返回较大的结果集 ES是设计成一个搜索引擎的,只擅长返回匹配查询较少文档,如果需要返回非常多的文档需要使用Scroll. 避免稀疏 因为ES是基于Lucene来索引 ...

随机推荐

  1. LDAP编辑器 LDAPAdmin

    LDAPAdmin 是一个在 Windows 用来编辑 LDAP 账户信息的管理工具,采用 Delphi 开发.

  2. 串口通讯编程一日通2(Overlapped IO模型)

    第一篇初步了解串口的大致运作,接下来我们看基本操作 先看串口操作的数据结构: 串口操作有几个比较重要的Struct 1.Overlapped I/O 异步I/O模型 异步I/O和同步I/O不同,同步I ...

  3. 【LeetCode】97. Interleaving String

    Interleaving String Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Fo ...

  4. Android SDK 快速安装方法

    我们都知道使用Android sdk manager下载安装sdk速度非常慢,一般在10k/s以内,本文章推荐一种能够借助迅雷等下载工具下载sdk的zip包从而快速安装sdk的方法. 1.下载3个xm ...

  5. IO多路复用之epoll

    1.基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本.相对于select和poll来说,epoll更加灵活,没有描述符限制.epoll使用一个文件描述符管理多个描述 ...

  6. python split() 用法

    字符串的split用法 说明:Python中没有字符类型的说法,只有字符串,这里所说的字符就是只包含一个字符的字符串!!!这里这样写的原因只是为了方便理解,仅此而已. 由于敢接触Python,所以不保 ...

  7. ubuntu下禁用和恢复触摸板

    1.一般禁用选项在 settings > mouse and touchpad 中.(16.04通过实验)如果无法禁用或者希望恢复,向下看. 2.命令行键入: xinput ,插卡touchpa ...

  8. hadoop修改

    https://github.com/medcl/elasticsearch-analysis-ik/releases hadoop-/etc/hadoop/core-site.xml <con ...

  9. SVN 安装后报不是内部或外部命令

    SVN安装后报不是内部或外部命令,也不是可运行的程序 解决方法:windows安装svn的时候默认是不安装 svn command line这个东西的,重新打开svn的安装exe,选择modify,将 ...

  10. Django QuerySet 方法梳理 。model外键 多对多的保存

    引用:https://feifeiyum.github.io/2017/03/28/python-django-queryset/ 说明 Models 层是 Django 框架中最强大的部分之一, 大 ...