JVM对ElasticSearch集群的稳定性有很大的影响。

Java是一个垃圾收集语言,意思是这个程序不会手动管理分配和释放内存。程序员只需要编写代码,jvm管理根据需要管理分配内存的处理,然后在不需要的时候清理。

------------

Young (or Eden)
当新实例一个对象的时候分配的空间,新生代的空间一般比较小,通常是100MB-500MB,新生代也包含了2个幸存(survivor)空间。

Old
存储较老的对象空间。这些对象预期是长久的并且持续了很长时间。老年代一般比新生代空间大得多,在ElasticSearch节点中最大可以设置为30GB。

当一个对象被实例化,它将被放到新生代。当新生代空间快满的时候,开始新生代垃圾收集(GC),仍然”活着“的对象移到survivor空间,不再用的对象被移除,如果一个对象在几次新生代GC中survived下来,它将被永远被放在老年代。

类似的情况发生在老年代,当空间快满时,开始GC移除不再用的对象。

对于空间比较小的新生代GC执行很快,但对于老年代来说就比较慢了,一个缓慢的GC可能有1s甚至15s以上,这对于服务是不可接受的。

JVM中的GC是非常复杂的算法,可以最小化停顿。ElasticSearch非常努力的试图使GC变得友好,通过智能重用内部对象、网络缓存区并默认启用文档值,但最终,GC 的次数和持续的时间是需要观察的指标,因为它是集群不稳定性的第一个罪归祸首。

一个频繁长时间GC的集群是重负载并且没有足够的内存的。这些长时间GC将使节点短暂的离开集群。在elasticsearch中为了保持集群的稳定和可用的副本,这种不稳定因素经常导致重新迁移分片。当你的集群尝试服务正常的索引和查询时,这反过来增加了网络流量和磁盘I/O负载。

简而言之,长时间GC是危险的,需要尽可能的减少它的时间。

-----------

elasticsearch进行节点的jvm的查询 GET /_nodes/stats

"jvm": {
"timestamp": ,
"uptime_in_millis": ,
"mem": {
"heap_used_in_bytes": ,
"heap_used_percent": ,
"heap_committed_in_bytes": ,
"heap_max_in_bytes": ,
"non_heap_used_in_bytes": ,
"non_heap_committed_in_bytes": ,
"pools": {
"young": {
"used_in_bytes": ,
"max_in_bytes": ,
"peak_used_in_bytes": ,
"peak_max_in_bytes":
},
"survivor": {
"used_in_bytes": ,
"max_in_bytes": ,
"peak_used_in_bytes": ,
"peak_max_in_bytes":
},
"old": {
"used_in_bytes": ,
"max_in_bytes": ,
"peak_used_in_bytes": ,
"peak_max_in_bytes":
}
}
}
}

注意:
1. heap_committed_in_bytes应该和heap_max_in_bytes相同,如果这个committed大小更小,JVM将会重新调整堆栈,这是个非常耗费资源的过程。
2. heap_used_percent这个指标是非常有用的,当heap达到75%时启动GC。如果节点一直大于75%,节点内存将有压力,这是一个警告信号,表示缓慢的GC将会在不久发生。 如果heap使用一直大于85%,elasticsearch可能会出现异常,超过90-95%伴随着GC时间达到10-30s将面临性能风险,并有可能引发一个内存溢出异常(OOM)。

elasticsearch 的内存JVM和GC相关问题的更多相关文章

  1. 内存泄露,GC相关

    内存泄露就是对象不在GC的掌控之内 下面对象会发生内存泄露现象: 1.没有引用的对象 2.虚,软,弱 引用对象 GC引用的对象指的是 1.JavaStack中引用的对象 2.方法区中静态引用指向的对象 ...

  2. 管中窥豹——从对象的生命周期梳理JVM内存结构、GC调优、类加载、AOP编程及性能监控

    如题,本文的宗旨既是透过对象的生命周期,来梳理JVM内存结构及GC相关知识,并辅以AOP及双亲委派机制原理,学习不仅仅是海绵式的吸收学习,还需要自己去分析why,加深对技术的理解和认知,祝大家早日走上 ...

  3. 聊一聊 JVM 的 GC

    原文链接:https://www.changxuan.top/?p=1457 引言 JVM 中的 GC 在技术博客中应该算是个老生常谈的话题,网络上也存在着许多质量参差不齐的文章,可以看出来大都是&q ...

  4. JVM初探- 内存分配、GC原理与垃圾收集器

    JVM初探- 内存分配.GC原理与垃圾收集器 标签 : JVM JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念 ...

  5. JVM内存管理及GC机制

    一.概述 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露 ...

  6. JVM虚拟机内存模型以及GC机制

    JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Ge ...

  7. JVM内存布局及GC知识回顾

    注:本文篇幅较长,且需要有一定的java基础,建议各位看官,备好瓜子.饮料.小板凳,摆个让自己舒服的姿势,慢慢细看^_^, 文中所有素材,均来自互联网,本人只是详细梳理了一遍,形成此文. 一.JVM运 ...

  8. [转帖]详解JVM内存布局及GC原理,值得收藏

    概述 https://www.toutiao.com/i6731345429574713868/ java发展历史上出现过很多垃圾回收器,各有各的适应场景,不仅仅是开发,作为运维也需要对这方面有一定的 ...

  9. JVM内存布局及GC知识

    一.JVM运行时内存布局 按java 8虚拟机规范的原始表达:(jvm)Run-Time Data Areas, 暂时翻译为"jvm运行时内存布局". 从概念上大致分为6个(逻辑) ...

随机推荐

  1. Asp.net core Identity + identity server + angular 学习笔记 (第一篇)

    用了很长一段时间了, 但是一直没有做过任何笔记,感觉 identity 太多东西要写了, 提不起劲. 但是时间一久很多东西都记不清了. 还是写一轮吧. 加深记忆. 这是 0-1 的笔记, 会写好多篇. ...

  2. 浅谈企业IT技术运营中台

    关注嘉为科技,获取运维新知 如果你是IT圈内的人,在2月份,你的朋友圈里面最火的词应该就是“中台”了,我们在此不讨论企业的技术中台.数据中台.AI中台.业务中台,想和大家讨论一下IT技术运营中台. “ ...

  3. Confluence 6 针对 'unmigrated-wiki-markup' 宏重新尝试合并

    在签名的章节中,我们主要是针对没有完全合并完成余下的为合并内容的异常处理.最常见的情况是内容以及被合并了,但是页面使用 wiki 标记的内容没有被合并,通常这些 wiki 标记的内容使用了 'unmi ...

  4. IDEA外部工具配置-OpenJML篇

    帮助文档 jetbrains帮助文档:https://www.jetbrains.com/help/idea/settings-tools-external-tools.html 使用external ...

  5. 使用Visual Studio Installer 2015打包WPF程序

    前言 做过WPF项目,就少不了要将程序打包部署到客户现场,因为一般长时间不会更新打包程序,每次变动较大需要重新配置打包程序时,就会有些生疏,不那么得心应手.为了方便记忆,记录到博客中. 准备 因为做过 ...

  6. python3 doc2vec文本聚类实现

    import sys #doc2vev import gensim import sklearn import numpy as np from gensim.models.doc2vec impor ...

  7. SQL Pretty Printer for SSMS 很不错的SQL格式化插件

    写SQL语句或者脚本时,看到凌乱的格式就头大了,于是决心找一款SQL语句格式化的工具. 功夫不负有心人还真的被我找到一款很好用,很方便的SQL Server插件:SQL Pretty Printer ...

  8. element-- 修改MessageBox 弹框 中确定和取消按钮顺序

    需求:修改弹框中的 取消/确定按钮顺序,及头部和底部背景颜色; 原ui效果图 需求ui效果图 方法:对取消及确定按钮自定义类名,样式重写

  9. ElasticSearch踩坑记录

    一.分词错误 [2018-02-06 14:28:30:098] --- [INFO] --- [CjhArticleSimilarityTask.java:66] --- [[SimilarityC ...

  10. android studio 编辑markdown文件

    作为开发人员,对markdown应该比较熟悉,我们在Android开始中,可以使用studio引入Markdown Navigator插件,进行编辑. 搜索 Markdown Navigator 安装 ...