首页 > 技术文章 > 图片上传后台服务报内存溢出 Out Of Memory Java heap space

lingduqianli 2021-07-03 23:49 原文

背景

前端调用后台,后台调用阿里云OSS上传图片时,图片大小如果超过900Kb,前端就会报Http 500内部服务器的异常信息。但是上传小于900kb大小的图片就没有问题。

现象

  • 前端:http 500异常。

  • 后台服务日志:Out Of Memory : Java heap space

解决办法

  1. 通过上传图片大小能判断出,服务器是通的,也就是说是后台服务器的问题,或者OSS服务有限制大小或者带宽的问题。

  2. 通过查看后台日志,后台报堆内存溢出,异常信息如下。

     org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space
  3. 通过异常信息,暂时排除OSS服务的问题。

  4. 分析图片大小,正常情况下,一个900KB大小的图片信息,后台读取大概需要10M的内存。然后查看了当前进程启动内存,是128M,正常情况下128M是可以的。但是在多线程并发的情况下,其实这个内存很小。后来启动内存改为最大内存改为256M后,再测试通过。但是图片大小超过3M还是报内存溢出?

  5. 问题点:为什么超过图片大小超过3M又报内存溢出呢?请大家讨论区评论吧

推荐阅读