Java内存配太大导致fullgc_记一次因为短命大对象导致fullGC的问题

写在前面

java内存申请和释放均是由jvm在控制。而释放往往会出现各种各样的问题,经常一个引用没处理好就引起内存泄漏,最后引发OOM。如果发生在重要业务系统还可能出现严重的生产事故。 因此内存使用一定要谨慎,特别是引用要及时断链。虽然jvm有GC(垃圾回收引擎),但只能清理没有引用的对象,因此对象在不使用时及时置null。当然,笔者对此是很小心的,但万万没想到还是遇到了fullGC(old GC)。

定义

jvm的GC

通常遇到的是堆区内存问题,也就是堆GC。jvm的GC发展到现在也经历很多发展了,现在主要还是分代回收的思路。

eden space

伊甸园,新生对象放置的地方。

survivor space

在jvm中的被回收过对象仍存活的地方。

old Generation

幸存区被清理后仍活着的对象就步入老年了。 大多数GC问题都在老年代中被发现,笔者遇到的问题也是在这里。

eden 和survivor都属于新生代,与old gen有明显差别,也就是这样决定了java程序不用主动回收也能在较好的状态运行。 eden和survivor空间相对old generation小很多,这也意味着存放的内存也少很多。jvm一般将长期引用(jvm会将对象分析其引用计数)的对象(多次GC仍存活的)放在Old generation中。

jvm堆区不同区域使用的是不同算法,eden和survivor的GC属于miniGC,也就是局部GC,特点是速度快,低延迟(1.标记复制算法与空间小的优势,2.GC时需要将所有线程挂起Stop The World)。而old generation发生GC则为FullGC,且old generation用的是标记整理算法,线程扶起时间会很长。频繁的fullGC可能是程序设计不合理或内存参数不合理。

言归正传

这两天笔者遇到一个问题导致了fullGC发生。将进程进行dump分析 jmap命令配合工具 MAT(eclipse提供)发现是部分局部变量占用太多空间未及时释放造成并且占用了55%以上的内存空间。 为什么局部变量还会未及时释放?查阅源代码发现所有引用处均未发现被全局对象、静态对象引用。ArrayList和LinkedList占用内存过高,但也未被全局对象和静态对象引用。

感觉程序被幽灵附身了!!! 不存在的,直觉告诉我这种问题肯定在自己的程序上。继续分析果然发现了问题所在:发现对象内的值关联性非常强,继续分析最终找到数据库查询参数。会不会是数据造成?面对这个疑问diff了最近数据的情况。

814593e886695fc1d29e90a82412f947.png

芦山真面目

最近数据量暴增! 数量增加了6倍+,空间增加了3倍+。

由于数据结构和业务逻辑的特殊性将同条件的数据全部查出来处理了,由于数据全是相互存在引用,eden空间无法分配进行了miniGC。miniGC后空间仍然不足,就这样新生对象直接进入old generation。才生出来就进入老年 >_

解决方案

知道了原因就立即分析得到了解决方案。尽量不要构建局部的大对象!!!因此将DB中查询出的量控制住,增加中间对象的数量,用完即置null。使得eden中及时GC,old generation增长稳定。 修改程序代码再将压一下,发现old generation增长缓下来了,问题解决。

如果遇到类似问题还可以用jconsole和jvisual两款工具实时监控jvm状态、对象实例指标等。

88726657d27939eeeeda78119d8fbf28.png

不好的消息:jdk9已将jvisual去除,要使用jvisual请使用jdk8。jdk10中jconsole也没了。。 jmap分析吧。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异步编程到底在说啥?

作者 | 码农的荒岛求生来源 | 码农的荒岛求生之前很多同学在微信上问能不能讲讲异步编程是怎么一回事儿,今天就和大家简单聊一聊这个话题。我们以函数调用为例,假设有这样的代码:void B() {lines read(filename);sum(lines); }void A() {...…

如何让评审人爱上我

简介: 今天小编作为一个开发者,放下外部的客观因素,仅从一个代码的实现者,一个被评审人的角度去思考如何让评审变得高效而富有意义。换句话说:如何让评审人爱上我(被评审人)。 众所周知&#x…

centos8安装mysql_CentOS8+FreeRadius+Mysql8.0+daloRadius建立Radius服务器

Linux发行版:CentOS8-1905数据库:Mysql8.0create WEB软件:httpddaloRadius前端使用PHPyum -y install update yum -y install httpd //web服务器 yum -y install vim // yun -y install wget // yum -y install net-to…

2025年公有云或将服务中国过半数字经济

简介: 2025年公有云或将服务中国过半数字经济阿里云研究院 高级战略总监 麻芃2020年,疫情“黑天鹅”对全球经济社会运行造成剧烈冲击,但数字经济的引擎作用却逆势凸显。去年我国数字经济整体规模达到39.2万亿元,实现9.7%的高速增长…

php mysql 绕过_PHP中md5绕过

一、md5($password,true)的SQL注入问题这里要提到一下MySQL中的数值比较问题。1、当数字和字符串比较时,若字符串的数字部分(需要从头开始)和数字是相同的,那么则返回的是true。select if(1"1abcd","等于","不等于") as t…

重磅发布:微服务引擎 MSE 专业版

简介: 性能提升 10 倍,更高的 SLA 保障,新用户限时抢购 8 折资源包。 微服务引擎 MSE 专业版发布,支持 Nacos 2.0 ,相比基础版,专业版具有更高的 SLA 保障,性能提升十倍,99.95%可用…

45分钟,411个中小品牌天猫双11实现新跨越

CSDN从天猫获悉,今年天猫双11,有一批中小品牌实现跨越式增长。截至11月11日0点45分,已有411个去年成交额过百万的中小品牌,今年销售额突破千万;更有40个去年双11成交额千万级的品牌,在今年双11成交额突破了…

组装台式电脑配置清单_攒机必备!各种价位的台式电脑配置清单!

点击上方「软件分享云」关注我们台式机,是一种独立相分离的计算机,完完全全跟其它部件无联系,相对于笔记本和上网本体积较大,主机、显示器等设备一般都是相对独立的,一般需要放置在电脑桌或者专门的工作台上。因此命名…

达摩院重要科技突破!空天数据库引擎Ganos解读

简介: Ganos空天数据库引擎是李飞飞带领的达摩院数据库与存储实验室研发的新一代位置智能引擎,采用了平台即服务、多模融合、计算下推和云原生全新处理架构,为政府、企事业单位、泛互联网客户提供移动对象、空间/时空、遥感多模态数据混合存储…

brainfuck 在线_酒店在线声誉持久战 重视社媒舆论 保持品牌一致性

维护品牌或酒店声誉是一场持久战,这对塑造积极的品牌认知和提升客户满意度至关重要。声誉管理包括两个关键部分:引导客人评价和公众舆论,并以适当的方式进行反馈。就在线声誉管理而言,品牌还需要注意另外一点,公众会在…

2021天猫双11:阿里巴巴业务已全部跑在阿里云上

“今年天猫双11是首个100%的云上双11,成功扛住了全球规模最大的流量洪峰。”11月11日,阿里巴巴首席技术官程立表示,阿里巴巴业务已全部跑在阿里云上,体验如丝般顺滑。经过历年双11的“大考”,阿里技术实现了多级跳跃。…

从“嵌入式”到“物联网”有哪些变化?

简介: 经过几十年发展,嵌入式技术已经用在了我们生活中的方方面面,但是嵌入式始终都带有小众,专业性强的属性,让很多非嵌入式领域的同学望而却步。近十几年的发展,物联网覆盖了越来越多领域,包括…

Serverless Devs 的官网是如何通过 Serverless Devs 部署的

简介: 只有自己吃自己的狗粮,自己做的东西才不“🐶”。Serverless Devs 自发展之处到现在,已经经历了几个月的时间,在这几个月,Serverless Devs 的成长是迅速的,这很大一部分的原因是“我们在吃…

crontab 改成只读模式_以“三合一”模式推动提质增效 助力公司高质量发展

近日,模块制造厂圆满完成位于原化机西部院内的吉林制造基地新老厂区的资源整合、机械设备修理以及厂区内设备土建基础施工、功能配套设备购置等工作,积极推进新厂区环评、厂区注册地址变更,使制造基地继承了老厂区所拥有的压力容器、超限设备…

5G 落地进入爆发期,是时候让毫米波登场了

作者 | 小枣君来源 | 鲜枣课堂2021年,全球5G网络建设和发展取得了不俗的成绩。根据GSA于8月发布的数据,已有70多个国家及地区的超过175家运营商,推出了5G商用服务。还有285家运营商,正在投资部署5G。中国的5G建设步伐,…

新型DDoS来袭 | 基于STUN协议的DDoS反射攻击分析

简介: 作为新型反射类型,目前仍存绕过防御可能性。 阿里云安全近期发现利用STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)服务发起的DDoS反射攻击。阿里云DDoS防护系统在秒级识别到攻击&#xff0c…

ssh是什么_【科普】SSH都不懂,还搞什么网络

关注我,你的眼睛会怀孕今天小编为大家分享一篇关于SSH 的介绍和使用方法的文章。本文从SSH是什么出发,讲述了SSH的基本用法,之后在远程登录、端口转发等多种场景下进行独立的讲述,希望能对大家有所帮助。1. 什么是SSH?…

10问10答:你真的了解线程池吗?

简介: 《Java开发手册》中强调,线程资源必须通过线程池提供,而创建线程池必须使用ThreadPoolExecutor。手册主要强调利用线程池避免两个问题,一是线程过渡切换,二是避免请求过多时造成OOM。但是如果参数配置错误&#…

浪潮K1 Power通过ISO/IEC 20243标准认证

日前,浪潮K1 Power服务器通过ISO/IEC 20243标准认证,成为中国第一个通过该认证的服务器产品线。 ISO/IEC 20243标准,也被称为O-TTPS(Open Trusted Technology Provider Standards,开放可信技术供应商标准)…

「技术人生」第3篇:解决问题的规律总结

简介: 本文将介绍问题研究背景及解决问题的一般规律和特殊规律及二者之间的辩证关系。 作者:贺科学 往期技术一号位方法论系列文章: 「技术人生」专题第1篇:什么是技术一号位? 「技术人生」第2篇:学会分…