JVM系统优化实践(22):GC生产环境案例(五)

这篇具有很好参考价值的文章主要介绍了JVM系统优化实践(22):GC生产环境案例(五)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

您好,这里是码农镖局CSDN博客,欢迎您来,欢迎您再来~


除了Tomcat、Jetty,另一个常见的可能出现OOM的地方就是微服务架构下的一次RPC调用过程中。笔者曾经经历过的一次OOM就是基于Thrift框架封装出来的一个RPC框架导致的宕机。

JVM系统优化实践(22):GC生产环境案例(五),技术,jvm,java,GC实践,GC

 

也就是当服务A更新后,服务B宕机了。

通过查看GC日志,发现是JVM堆抛出的OOM。打开内存快照,发现超大byte[]数组,而这个超大的byte[]数组是由RPC框架持有的。

JVM系统优化实践(22):GC生产环境案例(五),技术,jvm,java,GC实践,GC

 

初步判定原因是:服务A修改了Request类,但服务B未更新该类,还是旧版本,因此导致反序列化失败时RPC会开辟一个byte[]数组,默认大小是4G。

JVM系统优化实践(22):GC生产环境案例(五),技术,jvm,java,GC实践,GC

 

因此最终的解决方案也很简单:

1、服务B更新Request类;

2、将RPC默认byte[]数组大小调整为4M。

另一次事故是由马虎的开发工程师引起的。某个马虎的工程师用mybatis写的SQL语句在某些情况下允许不加where条件就可以执行,这导致一下子查出来上百万条数据,引发系统OOM。这种情况下,MAT工具对由Web容器(Tomcat/Jetty)或者RPC等底层框架所引发的OOM故障,用处并不大。但如果OOM主要是由于业务代码导致,那使用起来就简单得多。使用MAT工具定位问题的时候:

1、利用histogram功能占用内存最多的对象

2、找到占用内存过多的对象,并深入看看对象之间的持有关系

3、找到问题代码

与前面的RPC引发的OOM类似,有一个线上数据同步系统,专门从另一个系统同步数据,通过kafka来发送与消费数据。即使是这么简单的一个系统,也会不时地报一个OOM错误,且频率越来越高。这难道又是工程师的粗心引起的吗?

JVM系统优化实践(22):GC生产环境案例(五),技术,jvm,java,GC实践,GC

 

通过简单分析可以知道,既然每次重启过后都会频繁出现OOM,就说明内存使用率会不断上涨且难以清理。而JVM出现OOM,一般都是由两种情况引起:

1、要么高并发高负载,一瞬间创建太多对象,导致内存放不下

2、要么存活对象太多,GC无法回收

而针对此案例,极有可能就是第二种情况:存活对象太多。

JVM系统优化实践(22):GC生产环境案例(五),技术,jvm,java,GC实践,GC

 

这一点可以通过jstat来验证。重启系统后,启动jstat,观察到:

1、老年代持续增长,且老年代使用率达到100%后,Full GC根本回收不掉任何对象

2、老年代维持一段时间的100%使用率后,发生OOM

同时通过MAT找到占用内存最多的对象。利用Histogram功能,最终发现问题原因:

1、kafka的吞吐量和数据库的吞吐量完全不是一个数量级;

2、数据库的处理能力慢,导致数据不断积压,最终内存溢出;

3、典型的没控制好生产与消费数据的速率导致的OOM。

JVM系统优化实践(22):GC生产环境案例(五),技术,jvm,java,GC实践,GC

 

最后总结一下这几个案例:

1、必须对线上系统使用的各种技术,从服务器框架,到第三方框架,到Tomcat/Jetty等Web服务器,再到各种底层的中间件系统,都有深入的理解;

2、一般线上系统的故障,极少数是由业务代码直接导致的——更一般的情况是某个开源技术的内核代码就可能存在一定的故障和缺陷,只是在某些极端场景下才被发现而已;

3、定位、解决OOM问题,需要仔细研究底层源码,再结合线上业务、系统负载、参数配置和系统日志(含GC日志)等多种手段,才能完成;

4、一般情况下禁止显式调用System.gc(),但是如果开发的是文件存储、IM等大量使用NIO技术的应用,就不要禁止System.gc(),但业务代码还是不要出现System.gc();

5、生产环境一不使用parallel垃圾回收器;

6、一个Tomcat就是一个进程,不管在上面部署了多少个应用,都只有一个JVM进程。


感谢您的大驾光临!欢迎骚扰,不胜荣幸~文章来源地址https://www.toymoban.com/news/detail-614041.html

到了这里,关于JVM系统优化实践(22):GC生产环境案例(五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一种KV存储的GC优化实践

    作者:vivo 互联网服务器团队- Yuan Jian Wei 从内部需求出发,我们基于TiKV设计了一款兼容Redis的KV存储。基于TiKV的数据存储机制,对于窗口数据的处理以及过期数据的GC问题却成为一个难题。本文希望基于从KV存储的设计开始讲解,到GC设计的逐层优化的过程,从问题的存在到不

    2024年02月04日
    浏览(64)
  • 【案例教程】FVCOM流域、海洋水环境数值模拟方法及实践技术应用

    近年来,随着人类活动产生营养负荷的增加,流域、海洋生态系统面临严重威胁。近岸水质数值模是近岸水环境保护的有效工具,已经应用于近岸水环境污染控制、水质规划管理中。FVCOM在近岸水环境模拟方面具有一定优势,如采用非结构化三角形网格易于拟合岸线和局部加

    2023年04月21日
    浏览(53)
  • JVM学习(三)--生产环境的线程问题诊断

    使用top命令 使用ps H -eo pid,tid,%cpu | grep 进程id   (可以具体定位到某个进程的某个线程的cpu占用情况) 使用jstack 进程id |grep 32e4 -A20 (这里32e4就是线程的tid的16进制,A20表示显示前20行)可以找到当前进程的所有线程的具体信息,进而具体的代码行数,但是注意这里显示出来的

    2024年02月09日
    浏览(51)
  • JVM 内存大对象监控和优化实践

    作者:vivo 互联网服务器团队 - Liu Zhen、Ye Wenhao 服务器内存问题是影响应用程序性能和稳定性的重要因素之一,需要及时排查和优化。本文介绍了某核心服务内存问题排查与解决过程。首先在JVM与大对象优化上进行了有效的实践,其次在故障转移与大对象监控上提出了可靠的

    2024年02月10日
    浏览(43)
  • 车企数据治理实践案例,实现数据生产、消费的闭环链路 | 数字化标杆

    随着业务飞速发展,某汽车制造企业业务系统数量、复杂度和数据量都在呈几何级数的上涨,这就对于企业IT能力和IT架构模式的要求越来越高。加之企业大力发展数字化营销、新能源车等业务,希望通过持续优化客户体验,创造可持续发展的数字化转型之路。 为更好应对数

    2024年02月05日
    浏览(76)
  • 生产环境ES集群扩容及优化

    ES集群优化 具体详情请看官方文档建议:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/restart-cluster.html 1.先把elasticsearch的服务停掉 2.修改jvm.options配置文件下最大、最小内存限制 3.重启elasticsearch 4.配置 5.可供使用的查询地址

    2024年02月12日
    浏览(44)
  • 安全实践:保障 Kubernetes 生产环境的安全性

    ▲ 点击上方\\\"DevOps和k8s全栈技术\\\"关注公众号 Kubernetes(简称 K8s)是一个强大的容器编排平台,广泛应用于生产环境中。然而,与其功能强大相对应的是对安全性的高要求。在生产环境中,我们必须采取一系列措施来保护 Kubernetes 集群免受潜在的威胁和攻击。本文将介绍一些关

    2024年02月03日
    浏览(65)
  • 【案例教程】基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升

    根据生态环评内容庞杂、综合性强的特点,依据生态环评最新导则,将内容分为4大篇章 (报告篇、制图篇、指数篇、综合篇) 、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及净初级

    2024年02月06日
    浏览(43)
  • AIGC时代下阿里云视频云媒体内容生产技术实践

    编者按 AIGC时代下,媒体内容生产领域随着AI的出现也涌现出更多的变化与挑战。面对AI的巨大冲击,如何优化或重构媒体内容生产技术架构?在多样的应用场景中媒体内容生产技术又有着怎样的实践效果?LiveVideoStackCon2023深圳站邀请到阿里云智能资深技术专家邹娟,与大家分

    2024年03月15日
    浏览(66)
  • 在生产环境中部署Elasticsearch:最佳实践和故障排除技巧

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ React从入门到精通 ★ ★ 前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包