记一次OOM总结

在项目即将上线时遇到后台上传大视频报错,经过分析发现是由于内存不足导致的OutOfMemoryError。通过调整JVM堆内存参数,解决了300MB视频上传失败的问题,但之后又出现440MB视频上传超时。通过打印GC详情,观察到新生代和老年代GC情况,确定了问题在于大对象分配。解决方案是限制上传文件大小并采用分片上传策略,对于超过100MB的文件使用七牛分片上传,最大上传500MB。分析表明,代码审查和内存限制是防止OOM的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  前言:项目将要上线之际,后台管理交给乙方添加数据+上传资料等等,前台正微调中,在快要下班之际,乙方突然反应传一个300MB的视频没传上去,报错了(这儿就不要吐槽为啥用web传大视频了,已经被吐槽过了委屈)。然后上服务器查看日志,错误信息是OutOfMemoryError :Java heap space。 项目是使用Spring boot搭建,文件上传到服务器,服务器再上传到七牛云。


  为了让服务先能正常运行,给了参数-Xmx1g -Xms1g -Xmn300M。结果传个300M的还是因为OOM挂掉了。这儿就有点懵逼了,然后重新运行给了参数-Xmx2g -Xms2g -Xmn500M。这次总算没有挂掉。然后自己试了一个440M的没有问题,但过了十几分钟突然timeout。百度了下,改了server的connection到30min,终于可以正常运行。但事情还没有结束,带电脑回家分析产生OOM的原因。

  回到家,首先在最开始参数的基础上加了+XX:+PrintGCDetails参数,查看下GC回收情况。

  访问正常网页GC日志显示如下:

  

   ps:这儿使用System.gc()强制gc。不建议在正式环境中使用这个方法。甚至要使用参数-XX:+DisableExplicitGC禁止显示调用gc。且这儿的参数被改为了-Xmn250M。

   可以看到最终占用内存为413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值