`
zpball
  • 浏览: 916854 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生产环境使用elasticsearch遇到的一些问题以及解决方法(不断更新)

    博客分类:
  • solr
 
阅读更多
1.由gc引起节点脱离集群
     因为gc时会使jvm停止工作,如果某个节点gc时间过长,master ping3次(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.d/90-nproc.conf,把soft    nproc     1024这行的1024改大就行了。

4.集群状态为黄色时并发插入数据报错
[7]: index [index], type [index], id [1569133], message [UnavailableShardsException[[index][1] [4] shardIt, [2] active : Timeout waiting for [1m], request: org.elasticsearch.action.bulk.BulkShardRequest@5989fa07]]
这是错误信息,当时集群状态为黄色,即副本没有分配。当时副本设置为2,只有一个节点,当你设置的副本大于可分配的机器时,此时如果你插入数据就有可能报上面的错,因为es的写一致性默认是使用quorum,即quorum值必须大于(副本数/2+1),我这里2/2+1=2也就是说要要至少插入到两份索引中,由于只有一个节点,quorum等于1,所以只插入到主索引,副本找不到从而报上面那个错。
解决方法:(1)去掉没分配的副本。(2)把写一致性改成one,即只写入一份索引就行。

5.设置jvm锁住内存时启动警告
当设置bootstrap.mlockall: true时,启动es报警告Unknown mlockall error 0,因为linux系统默认能让进程锁住的内存为45k。
解决方法:设置为无限制,linux命令:ulimit -l unlimited

6.错误使用api导致集群卡死
其实这个是很低级的错误。功能就是更新一些数据,可能会对一些数据进行删除,但删除时同事使用了deleteByQuery这个接口,通过构造BoolQuery把要删除数据的id传进去,查出这些数据删除。但问题是BoolQuery最多只支持1024个条件,100个条件都已经很多了,所以这样的查询一下子就把es集群卡死了。
解决方法:用bulkRequest进行批量删除操作。

7.org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream
原因:es节点之间的JDK版本不一样
解决方法:统一JDK环境

参考资料:
http://stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux
http://www.elasticsearch.org/guide/reference/setup/installation.html
http://blog.sematext.com/2012/05/17/elasticsearch-cache-usage/
http://www.searchtech.pro/articles/2013/02/15/1360942664366.html

本文地址:http://blog.csdn.net/laigood12345/article/details/8193170
分享到:
评论

相关推荐

    ES head插件

    - **临时查看**:在遇到问题需要临时查看 ES 集群状态时,ES Head 是个快速的解决方案。 4. **与 Kibana 比较** - 虽然 Kibana 功能更强大,包括可视化、警报、仪表板等高级功能,但 ES Head 更简洁,上手更快,...

    Springboot开发-将springboot与elasticsearch进行整合开发.zip

    - 对Elasticsearch的操作可能会遇到网络问题、索引不存在等异常,应适当地捕获并处理这些异常。 - 记录详细的日志,有助于调试和故障排查。 7. **性能调优** - 考虑使用Elasticsearch的批量操作以提高效率。 - ...

    Elasticsearch核心知识篇、项目中如何使用、如何优化进阶

    - **问题背景**:当Elasticsearch集群重启时,可能会遇到Shard恢复时间过长的问题,这会影响到系统的可用性和性能。 - **解决策略**: - 使用`index.recovery.initial_shards`参数来指定初始恢复的分片数量。 - ...

    ES Head插件离线版

    2. **安全问题**:Head 插件提供了一个开放的接口,任何人都可以访问到你的 ES 集群信息,因此在生产环境中使用时,需要考虑安全策略,如设置防火墙规则或使用其他安全措施。 3. **替代工具**:虽然 ES Head 插件...

    自动化现场考问题

    4. **持续集成/持续部署(CI/CD)**:CI/CD是现代软件开发流程的关键组成部分,它确保代码更改能够快速、可靠地集成到主分支,并自动部署到生产环境。Jenkins、GitLab CI/CD、Travis CI等工具的配置和使用,以及如何...

    一个有意思的react问题

    7. **错误边界**:React 16引入了错误边界,这是一种捕获和打印错误的组件,并且在生产环境中防止整个应用程序崩溃的机制。 综上所述,面对一个有意思的React问题,我们需要分析HTML结构、理解Babel的作用、掌握...

    PCS7使用入门(中文手册)

    测试通过后,可以将开发的应用部署到实际生产环境中,并开始运行。在运行过程中,用户还需不断监控系统性能,并进行必要的维护和升级工作。 根据 PCS7 使用入门手册的指导,用户将能够一步一步建立起一个稳定可靠的...

    前端开源库-harp-scripts

    7. **社区支持**:作为开源项目,harp-scripts拥有活跃的开发者社区,不断更新和改进,提供问题解答、示例代码和插件,帮助开发者解决遇到的问题。 8. **跨平台兼容**:harp-scripts可以在多种操作系统上运行,包括...

    Node.js-noBind-一个小工具没有更多的“绑定”JSX或任何其他上下文

    因此,在生产环境中使用可能需要配置Babel或其他转译工具。此外,不支持不使用类语法的函数组件。 ## 6. 结论 `noBind`是一个针对Node.js和React开发的实用工具,它简化了函数绑定的流程,提高了代码可读性和运行...

    babel7.x和webpack4.x配置vue项目的方法步骤

    6. 打包发布:当一切配置无误并且开发和测试都通过后,就可以使用Webpack的打包命令,生成可以在生产环境中使用的静态资源文件。 在实际操作中,以下是一些常见的问题和解决方案: - extract-text-webpack-plugin...

    高可用分布式架构设计与实践-内训方案.pdf

    如何在生产环境中进行性能分析,需要注意哪些事项。 - **案例** 分享具体的性能调优案例,包括问题定位、解决方案等方面的经验。 #### 第十五课:电商系统解密篇 - **京东开放平台(POP)解密** POP是京东为第...

    Android Studio 2.1百度云下载链接

    此外,需要注意的是,由于版本更新迅速,使用旧版本可能会遇到兼容性问题或者错过新特性。 ### 结论 综上所述,Android Studio 2.1作为一款强大的Android应用开发工具,在其发布当时带来了一系列重要的改进和新...

    SMT DEFECT CODE

    本文将详细介绍SMT生产中常见的各类缺陷及其定义,帮助技术人员更好地识别并解决这些问题。 #### 二、SMT缺陷概述 SMT生产过程中可能遇到的缺陷种类繁多,主要包括但不限于以下几类: 1. **Insufficient Solder ...

    kubernetes.pdf

    - **ELK Stack**:Elasticsearch、Logstash、Kibana组成的日志处理解决方案。 **4.5 高可用** - **HAProxy**:用于实现高可用的服务发现和负载均衡。 **4.6 调试** - **kubectl**:命令行工具,用于与Kubernetes...

    快手-倪顺-快手数据中台建设:大数据服务化之路

    然而,随着数据量的不断增长,数据开发过程中遇到了诸多痛点,如数据交付困难、服务开发复杂、权限和可用性问题以及运维挑战。为解决这些问题,快手构建了大数据服务化平台,旨在实现数据服务的一站式自助,降低开发...

    gyh-MIS-Lecture-03.pdf

    4. **解决现有系统问题**:随着时间的推移,现有的信息系统可能会出现功能不足、性能下降等问题,需要通过开发新的MIS系统来解决这些问题。 #### 九、面临的挑战与误区 在MIS系统开发过程中,常常会遇到以下挑战和...

    webpack::scroll:一些节点教程-《 Webpack学习笔记》

    在实际项目中,你可能还会遇到处理图片、字体文件、异步加载模块等问题,这时候就需要灵活运用Loaders和Plugins来解决。随着对Webpack的深入,你还可以探索更高级的优化策略,如动态导入、懒加载、预加载等,以提高...

    react-boilerplate

    React-boilerplate利用了React的优势,同时解决了初学者在搭建开发环境时可能遇到的复杂问题。 在描述中提到的“正在施工:construction:”,意味着这个boilerplate可能还在持续更新和优化中,开发者可以期待更多...

Global site tag (gtag.js) - Google Analytics