Java服务频繁挂掉,内存溢出

Java服务频繁挂掉,内存溢出问题记录

项目场景:

公司有一个服务,时常隔三岔五就挂掉。


问题描述:

实施反馈有一个服务,每隔两三天就会报502。之前的开发没处理,他们都是重启来解决这个问题的(因为用户少和这个服务不常用,所以这个问题就到了我手里)。

原因分析:

根据经验像是内存溢出


解决方案:

提示:
查看内存:jstat -gc (进程号)
YGC:新生代垃圾回收次数
YGCT:新生代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
这里没有看出什么异常

在这里插入图片描述

Memory Analyzerg:官网地址下载的时候注意选择中国的这个镜像,软件的教程可以去网上搜索下
在这里插入图片描述

保存堆快照文件命令
jmap -dump:format=b,file=dump.txt 108122(进程号)

拉到 Memory Analyzer (JVM Heap Dump分析工具)里看了下,也没看出什么问题
以前遇到这样的情况,会有一个占用率特别多的地方。分析感觉应该是某一块代码,短时间导致内存溢出。

在这里插入图片描述

到了这里,我就去翻了一下。挂掉之前的日志文件,看看都执行了什么。日志文件上显示一条sql,在几秒内执行了上万次。好家伙,我找到那一块的代码一看stream的map()方法里面放了一个查询组织的方法(这个方法每次查询完会创建一个List)😢。我就把查询语句给抽离出了循环里面。

我感觉它应该是在一瞬间把伊甸园区,和幸存区给占满了。正常情况下,应该不会遇到短时间创建这么多集合的。
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值