一:硬件方面

 
在预算充足的情况下。特别是一些高并发业务的搜索。硬件层面占用整个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. ISO镜像安装UbuntuKylin 13.04 64位,启动菜单制作实例

    1.将光盘镜像中的vmlinuz.efi.initrd.lz,和镜像本身(ubuntu....iso) 三个文件复制到U盘根目录下.如果下面的方法没成功启动,你可能要把U盘格式化为USB-HDD FA ...

  2. lamp 一键安装

    下载安装(ssh登录服务器,执行如下操作即可,需要用到root用户权限来安装) 源码编译安装 wget http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz ta ...

  3. 如何修改浏览器默认的alert样式?

    window.alert = function(str) { var shield = document.createElement("DIV"); shield.id = &qu ...

  4. 常用RGB颜色表

      作者:张家珩2005-12-02 20:51分类:默认分类     R G B 值   R G B 值   R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF0 ...

  5. mac go环境报警告

    go get -u github.com/beego/bee 报警告: # github.com/beego/beeld: warning: text-based stub file /System/ ...

  6. int main() 与 int _tmain()

    用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是&l ...

  7. github get 请求指定页面的代码

    https://raw.githubusercontent.com/dragon8github/wx-h5/master/push.sh

  8. MySQL错误代码大全(史上最全)

    用任何主机语言调用MySQL时可能出现的错误.首先,列出了服务器错误消息.其次列出了客户端程序消息. B.1. 服务器错误代码和消息  服务器错误信息来自下述源文件: · 错误消息信息列在share/ ...

  9. Linux硬盘速度测试的命令

    测试下硬盘的读写速度如何,在linux下可以使用hdparm 对硬盘进行测试或查看硬盘的相关信息. hdparm 命令进行硬盘速度测试.参数: -a 表示是否关闭磁盘预读取功能.对于大文件读取,这个显 ...

  10. Atitit.struts2体系结构大总结

    Atitit.struts2体系结构大总结 1. 国际化与异常处理 2 2. 第5章 拦截器 2 3. 第7章 输入校验 2 4. 避免表单重复提交与等待页面 2 5. Struts 2对Ajax的支 ...