ElasticSearch 生产中的问题与解决方案

1.由 gc 引起节点异常

 问题:

  因为 gc 时会使 jvm 停止工作,如果某个节点 gc 时间过长,master ping 3次(zen discovery默认 ping 失败重试 3 次)不通后就会把该节点剔除出集群,从而导致索引进行重新分配。

 解决方法:

  1. 优化gc,减少gc时间。

  2. 调大zen discovery 的重试次数(es参数:ping_retries)和超时时间(es参数:ping_timeout)

  后来发现根本原因是有个节点的系统所在硬盘满了。导致系统性能下降。

2. out of memory 错误

 问题:

  因为默认情况下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分钟。

3.无法创建本地线程问题

 问题:

  es恢复时报错: RecoverFilesRecoveryException[[index][3] Failed to transfer [215] files with total size of [9.4gb]]; nested: OutOfMemoryError[unable to create new native thread]; ]]

刚开始以为是文件句柄数限制,但想到之前报的是too many open file这个错误,并且也把数据改大了。查资料得知一个进程的jvm进程的最大线程数为:虚拟内存/(堆栈大小*1024*1024),也就是说虚拟内存越大或堆栈越小,能创建的线程越多。重新设置后还是会报那这错,按理说可创建线程数完全够用了的,就想是不是系统的一些限制。后来在网上找到说是max user processes的问题,这个值默认是1024,这个参数单看名字是用户最大打开的进程数,但看官方说明,就是用户最多可创建线程数,因为一个进程最少有一个线程,所以间接影响到最大进程数。调大这个参数后就没有报这个错了。

 解决方法:

  1. 增大 jvm 的 heap 内存或降低 xss堆栈大小(默认的是512K)。

  2. 打开/etc/security/limits.conf ,把soft nproc 1024 这行的 1024 改大就行了。

时间: 2024-10-25 21:37:16

ElasticSearch 生产中的问题与解决方案的相关文章

NeuraSuite.v2005.11 1CD(石油和天然气行业中实用且直观解决方案的软件)

NeuraSuite.v2005.11 1CD(石油和天然气行业中实用且直观解决方案的软件) NIST-Refprop v7.0 1CD Petroleum Toolboxes 2008 v10.0 1CD Pipeline Studio 3.2.06-ISO 1CD(稳定版,化工管道仿真技术) Pipeline Toolbox 2008 Enterprise Edition 1CD Portable Arguslab v4.0.1 1CD Portable ChemSketch v11.2 1

使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb --username NAME --passord PASS --verbose -m 1 --table T_USERINFO 错误1:File does not exist: hdfs://opt/sqoop-1.4.4/lib/commons-io-1.4.jar FileNotFoundEx

Sass for循环中编译%时报错解决方案

sass功能强大,特别是支持for循环,节省大量开发时间,但是在开发时遇到一个问题,直接使用%时没有问题,当有变量时再加% 单位在编译时报错: 这样没有问题: @for $width from 0 to 10{ .wp#{$width}{ width:$width px; } } 但是这样就有问题了: @for $width from 0 to 10{ .wp#{$width}{ width:$width%; } } 或者这样: @for $width from 0 to 10{ .wp#{$w

[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标)

[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标) 2015-01-04 来源: http://blog.csdn.net/dm_vincent/article/details/42387161 本章翻译自Elasticsearch官方指南的Aggregations-High-level Concepts一章. 高层概念(High-Level Concepts) 和查询DSL一样,聚合(Aggregations)也拥有一种可组合(Composabl

JavaScriptSerializer中日期序列化问题解决方案

JavaScriptSerializer中日期序列化问题解决方案 直接进入主题: class Student { public int age { get; set; } public DateTime? date { get; set; } public string name { get; set; } } 当点击的时候: private void button1_Click(object sender, EventArgs e) { System.Web.Script.Serializat

《转》'autocomplete="off"'在Chrome中不起作用解决方案

最近项目中遇到一个令人头疼的问题,查阅各种资料,尝试各种方法,最终得以解决:哎···下面就说说这心酸的历程吧. 大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为"on",也可以省略属性名,直接写入关键字on或off. 网站项目中,有登录和注册的弹框,在除chrome的浏览器中一切都ok,一旦在谷歌浏览器中,问题来了:首先从登录弹框中登陆成功

信用评分卡模型开发中双峰分布原因及解决方案

信用评分卡模型开发中双峰分布原因及解决方案 文: 郑旻圻 邹钰 刘巧莉 转自:  数信互融 在信用评分卡模型开发过程中,正态性是检验模型信用评分分布是否有效的一个重要指标.正常情况下,标准的正态分布是单峰分布:但是在实际建模过程中,会遇到信用评分分布出现双峰的情况. 双峰分布出现时,数据规律一致性的假设被打破,我们需要从不同的角度考察其出现双峰分布的原因,对模型加以调整,使之准确地反映业务和数据中的规律,以便模型准确适用. 根据为数十家互联网金融企业建立评分卡模型的实践经验,我们总结了一些造成双

VS2013中使用git发布解决方案master分支的时候出现错误

环境:VS2013+ 码云(https://git.oschina.net/)错误描述:在VS2013中使用git发布解决方案master分支的时候出现“无法将本地分支 master 发布到远程存储库 origin,因为此处已存在具有同一名称的分支.您可能需要重命名您的本地分支,然后重试”,如下图所示 其实官网创建时已经给出了解决办法: 1.创建项目的时候不需要选择自动创建ReadMe文件,如果已经创建可以选择清空项目 创建项目后(不含ReadMe文件)Code版块会自动跳转到该提示 根据该提示

电子商务中的网上支付解决方案

电子商务中的网上支付解决方案 一.引言 随着中小企业对电子商务应用程度的深入,越来越多的企业希望在自己的网站上能与顾客实现在线交易,而网上支付问题则是在线交易中的关键问题.对于中小企业而言,可以通过哪些方法低成本.高效率地解决网上支付问题呢?本文提出了网上支付问题的两种主要解决方案:网上银行模式和第三方支付平台模式,同时分析了网上支付中存在的主要问题及应对策略. 二.网上支付概述 网上支付是指以金融电子化网络为基础,以商用电子化工具和各类交易卡为媒介,采用现代计算机技术和和通信技术作为手段,通过