1、问题背景

线上环境有3台8G内存的服务器搭建的ES集群系统。ES采用CMS垃圾回收器。

2、问题现象

(1)ES查询服务偶尔会出现超时现象,日志中有“node of configured nodes were available”;
(2)一段时间后,ES部分节点会挂掉,整个ES集群的状态由绿色变成黄色;
(3)重启后,ES恢复正常,运行一段时间后会出现(2)的现象。

3、问题分析

(1)ES集群提供的查询服务,非常消耗内存,所以首先想到的就是8G内存无法支撑我们系统千万级别的数据查询。
(2)登陆系统查看报错,有关于垃圾回收的日志如下。

[2021-08-02 10:18:14,037][INFO ][monitor.jvm              ] [IPADDRS-9300] [gc][young][216907][612] duration [765ms], collections [1]/[1.7s], total [765ms]/[57.6s], memory [4.9gb]->[4.9gb]/[7.9gb], all_pools {[young] [190.8mb]->[5mb]/[266.2mb]}{[survivor] [33.2mb]->[33.2mb]/[33.2mb]}{[old] [4.6gb]->[4.9gb]/[7.6gb]}
[2021-08-02 10:19:05,077][INFO ][monitor.jvm              ] [IPADDRS-9300] [gc][young][216958][616] duration [718ms], collections [1]/[1s], total [718ms]/[59.8s], memory [5.8gb]->[5.8gb]/[7.9gb], all_pools {[young] [263.5mb]->[4.7mb]/[266.2mb]}{[survivor] [33.2mb]->[33.2mb]/[33.2mb]}{[old] [5.6gb]->[5.8gb]/[7.6gb]}
[2021-08-02 10:20:36,308][WARN ][monitor.jvm              ] [IPADDRS-9300] [gc][old][217020][21] duration [28.6s], collections [1]/[29.4s], total [28.6s]/[47.2s], memory [6.5gb]->[6.5gb]/[7.9gb], all_pools {[young] [178.9mb]->[50.4kb]/[266.2mb]}{[survivor] [33.2mb]->[0b]/[33.2mb]}{[old] [6.3gb]->[6.5gb]/[7.6gb]}
[2021-08-02 10:21:08,913][WARN ][monitor.jvm              ] [IPADDRS-9300] [gc][old][217035][22] duration [17.8s], collections [1]/[18s], total [17.8s]/[1m], memory [7.1gb]->[7.2gb]/[7.9gb], all_pools {[young] [14.6mb]->[12.4kb]/[266.2mb]}{[survivor] [33.2mb]->[0b]/[33.2mb]}{[old] [7.1gb]->[7.2gb]/[7.6gb]}
[2021-08-02 10:22:18,270][WARN ][monitor.jvm              ] [IPADDRS-9300] [gc][old][217078][25] duration [27.1s], collections [1]/[27.1s], total [27.1s]/[1.5m], memory [7.8gb]->[6.5gb]/[7.9gb], all_pools {[young] [252.3mb]->[4.1mb]/[266.2mb]}{[survivor] [3.6mb]->[0b]/[33.2mb]}{[old] [7.6gb]->[6.5gb]/[7.6gb]}
[2021-08-02 10:22:54,407][WARN ][monitor.jvm              ] [IPADDRS-9300] [gc][old][217083][26] duration [29.9s], collections [1]/[30.7s], total [29.9s]/[2m], memory [7.6gb]->[7.8gb]/[7.9gb], all_pools {[young] [2.2mb]->[228.2mb]/[266.2mb]}{[survivor] [33.2mb]->[0b]/[33.2mb]}{[old] [7.6gb]->[7.6gb]/[7.6gb]}
[2021-08-02 10:22:54,409][DEBUG][action.admin.cluster.node.stats] [IPADDRS-9300] failed to execute on node [tYMvYmijTgOe5maeJ145zg]

观察日志发现:
(1)年轻代内存过小,只有225MB;
(2)年轻代内存过小导致频繁发生young gc;
(3)每次young gc,大概就会有200-300MB的数据进入老年代,说明这是一次无效的young gc;并没有释放内存,只是把数据从年轻代转移到了老年代。
(4)老年代内存设置为7.6G,但是内存增长速率非常快,和(3)有很大关系看;
(5)由于老年代内存增长很快,CMS如下的设置。当内存使用率接近70%,也就是5.7G时,会出发old GC;CMS在再次标记阶段会stop the world,导致服务不可用;
(6)由于old gc频繁,导致回收时,大部分对象还没有失效,回收效率低。

-XX:CMSInitiatingOccupancyFraction=75 //老年代内存使用率超过75%触发垃圾回收

总结:年轻代设置过小,导致频繁无效的young gc,很快把对象都放入了老年代中,一段时间后就会把老年代占满;导致频繁old gc。cms会stop the world,导致服务不可以用,甚至出现OOM。

4、解决方法

8G内存,按照1:2设置年轻代和老年代的内存大小;

十、JVM调优实战——ES集群服务不稳定相关推荐

  1. JVM调优实战:to-space exhausted Evacuation Failure

    一次线上dubbo问题的定位,进行JVM调优实战. 问题 线上dubbo接口provider抛出异常: org.apache.dubbo.rpc.RpcException: Failfast invo ...

  2. 七、JVM调优实战——基本命令使用

    一.JVM类加载机制--自定义类加载器 二.JVM--对象内存分配机制 三.JVM内存模型 四.JVM垃圾收集算法和垃圾收集器 五.CMS垃圾回收器--三色标记算法 六.G1垃圾收集器 七.JVM调优 ...

  3. 纯手写2022年最新JVM调优实战手册,看完让你精通JVM调优

    很多程序员不重视 JVM 内存调优,写出来的代码经常出现 OOM 等内存问题.而且,面试求职者中,很多求职者一旦遇到JVM 或者 JVM 调优方面的问题,往往不知如何回答,才能充分展现自己的能力. j ...

  4. 带你感受一次JVM调优实战

    本文分成两部分,先了解理论,然后再进行实战. 理论篇 1.1 调优目标 JVM调优的两大目标是: 提高应用程序的性能和吞吐量: 通过优化JVM的垃圾回收机制.调整线程池大小和优化代码,可以提高应用程序 ...

  5. JVM 调优实战--JVM的运行参数及jinfo查看运行参数信息

    为什么要进行JVM优化? 本篇博文基于jdk1.8来讲解. JVM的参数 标准参数比较稳定,基本上各个不同的jdk版本都会支持. -X参数是非标参数,各个版本不同,可能用着用着就没了. -XX参数也属 ...

  6. JVM从入门到精通(九):JVM调优实战 - arthas 的使用

    Arthas 文档 https://github.com/alibaba/arthas/blob/master/README_CN.md 运行起来我们的java程序 启动 arthas 的 jar 文 ...

  7. JVM调优实战:G1中的to-space exhausted问题

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者:阿杜 来源:公众号「javaadu」 >> 「开学季」当当大促!4-5折优 ...

  8. JVM 调优实战--常见的垃圾回收算法及垃圾收集器组合

    什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种 ...

  9. JVM从入门到精通(八):JVM调优实战

    案例1:系统CPU经常100%,如何调优? 推理过程是:CPU100%,那么一定有线程在占用系统资源,所以 找出哪个进程cpu高(top命令) 该进程中的哪个线程cpu高(top -Hp) 如果是ja ...

最新文章

  1. Android Studio 初体验
  2. 美团外卖商家端视频探索之旅
  3. 回溯算法和贪心算法_回溯算法介绍
  4. Python中通常不应该犯的7个错误
  5. java quartz Scheduler 操作Trigger
  6. Devexpress 常见问题
  7. googlemap 两点间平滑移动_Salomon萨洛蒙徒步登山鞋实测,一双在山林与城市间探索的户外鞋...
  8. (二)cmockery中run_tests.c分析
  9. 程序员修炼境界:心如止水还是心绪不定
  10. MySQL蜜罐在护网中提取攻击者微信ID
  11. sip 软电话 java源码,完美的 SIP 软电话
  12. GNURadio(一)
  13. 系统重构过程中的异构数据同步回环处理
  14. 群体Polymorphism information content(PIC)、 Nei diversity index (Nei s) 和 Shannon index (I)计算方法
  15. 电脑连不上网,WiFi没有显示出来
  16. python文本聚类 词云图_有哪些软件可以进行中文词频分析?
  17. NTVDM遇到一个硬错误
  18. MATLAB绘制长方体
  19. 英语四六级写作常用高分词汇句型替换
  20. MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?

热门文章

  1. mc服务器中怎样打开指令显示,mc服务器指令
  2. 安鸾CMS系列之Wordpress02
  3. APP测试点总结(功能,交互,死机崩溃状态分析,容易出错的检查点)
  4. 通过进程池爬取王者荣耀所有英雄皮肤和技能详情
  5. linux解压zip文件
  6. Matlab实现经典功率谱分析和估计
  7. 3.1 多集放大电路的耦合方式
  8. 3行代码5秒抠图的AI神器,PS什么的靠边了
  9. 33篇大数据治理文章打包送,技术+案例一应俱全!大数据
  10. Tomcat服务器修改网站显示图标