JVM新生代和老年代的参数——一次ElasticSearch的jvm参数调整

标签: jvm 新生代 老年代
9人阅读 评论(0) 收藏 举报
分类:

在测试服务器上发现 ES 进程总是挂掉,于是看 ES 的 gc 情况:
先查到进程的 PID 号,然后使用 jstat 指令:

jstat -gc PID 5000

5000 是毫秒,每 5 秒刷新一次打印。

查看日志如下:
调整参数前

可以看到经过一段时间的观察,新生代的 YoungGC 并没有发生,一直是 18 次没改变,而 FullGC 在新生代内存用完时就会出现一次,非常的频繁。
原因很明显,年老代的内存大小只有 512K 字节,特别小,导致老年代一直处于没有剩余空间的状态,所以每次的 GC 都会触发 FullGC 。

之前的内存没有设置新生代和老年代的比例,导致 16G 内存完全分给了新生代,其中 Eden 区 12G,survivor1 和 survivor2 各 2G 左右大小。

调整时,加入新老生代的内存比例即可。

-XX:NewRatio=8

这里由于 ES 检索时,内存中会缓存许多检索记录的结果,而且空间会特别大,所以就将老年代设置大一些,老年代/新生代=8,这样更多的记录能够被缓存下来,提高 ES 的检索效率。

参数改变后,总共分配 12G 的内存,老年代 9G ,新生代 1G 多,Eden大约 1G,survivor1 和 survivor2 大约各 100M 大小。
更改后日志如下:
根据日志可以看到,YoungGC 经常在执行,而 FullGC 由于老年代使用量比较小,频率会很低,达到了预期的目标。

调整参数后
调整参数后2

查看评论

Java内存模型 —— 深入JVM

JVM是整个Java程序运行的母体,但是大部分的开发者并不清楚JVM的执行流程。同时虽然都知道Java提供有垃圾收集机制,但是该如何进行合理的GC处理?以及该使用的GC策略也不清楚,为此本课程专门针对于JVM的执行流程、内存分配、垃圾收集等机制进行了综合讲解。官方QQ群:612148723。
  • 2016年12月31日 20:43

根据应用程序设置JVM参数(三)-优化老年代大小

接着前面的,现在来计算老年代的 日志图: 1.假如没有FullGc,如何计算老年代需要多少时间装满? (不看第一条和最后一条数据,分析)通过MinorGc计算每次老年代的增量 老年代的增量...
  • q291611265
  • q291611265
  • 2015-08-28 15:12:59
  • 1400

根据应用程序设置JVM参数(一)-设置堆、新生代、老年代、持久代大小

一、根据程序的运行状况查看其活跃的数据量 ①、活跃的数据: 1.应用程序运行于稳定状态时,老年代占用的java堆大小 2.应用程序运行于稳定状态时,永久代占用的java堆大小 其实就是Full...
  • q291611265
  • q291611265
  • 2015-08-27 17:29:24
  • 6504

JVM-堆学习之新生代老年代持久带的使用关系

之前被问到一个问题,大意是这样的:假如jvm参数中,最大堆内存分配了800M,Eden区分配了200M,s0、s1各分配50M,持久带分配了100M,老年代分配了400M,问现在启动应用程序后,可使用...
  • zghmnb
  • zghmnb
  • 2017-06-16 11:01:00
  • 961

根据应用程序设置JVM参数(二)-优化新生代大小

一、 还是接着上一篇的讲: 继续贴上一次运行的日志数据 分析: 1.看频率,可以发现基本上是4秒进行一次Gc 2.看耗时,可以发现基本上是需要0.037秒 当前的虚拟机...
  • q291611265
  • q291611265
  • 2015-08-28 14:22:44
  • 3029

(入门贴)JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配

如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe。JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数。再通过JD...
  • aitangyong
  • aitangyong
  • 2014-09-17 21:01:15
  • 7595

JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代

你对JVM内存组成结构和JVM垃圾回收机制是否熟悉,这里和大家简单分享一下,希望对你的学习有所帮助,首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示。 JV...
  • zhb123GGGGGG
  • zhb123GGGGGG
  • 2014-11-07 22:18:34
  • 18099

对JVM中垃圾回收机制的个人理解--新生代,老年代,永久代

就想通过这个方式看看自己看完一遍书后还记得什么... 不管怎么样要先来个帅气的开场白:有错的地方请多指正,3q!!!!!!!!!!!!!!!!!!!!!!! 在堆中,新生代主要存放的是哪些很快就会被G...
  • qq_28750155
  • qq_28750155
  • 2016-01-25 13:41:51
  • 7406

JVM之新生代进入老年代

内存分配及回收策略——新生代如何进入老年代内容摘抄自周志明的《深入理解Java虚拟机2版》 新生代GC(Minor GC)指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以...
  • hlx156
  • hlx156
  • 2017-12-20 09:30:58
  • 168

jvm的新生代和老年代简介

新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1),这个比例也是可以修改的。通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中...
  • zzuchenyb
  • zzuchenyb
  • 2018-03-02 16:45:13
  • 99
    个人资料
    持之以恒
    等级:
    访问量: 10万+
    积分: 2477
    排名: 1万+
    最新评论