public Map<String, Object> checkWithIn(Map<String, Object> params, boolean flag) { InputStream in = (InputStream) MapUtils.getObject(params, "in"); Map<String, Object> resMap = new HashMap<String, Object>(); BufferedInputStream bis = null; ByteArrayOutputStream fos = null; ByteArrayInputStream bai = null; byte[] buffer = new byte[NumberConstant.CHANGESIZE]; int len = 0; int maxsize = NumberConstant.TWO * NumberConstant.CHANGESIZE * NumberConstant.CHANGESIZE; String picDesc = MapUtils.getString(params, SpsConstant.PIC_DESC, ""); String prevName = MapUtils.getString(params, "prevName", ""); try { bis = new BufferedInputStream(in); fos = new ByteArrayOutputStream(SpsConstant.SIZECHANGE); // 校验图片大小 while (-1 != (len = bis.read(buffer))) { fos.write(buffer, 0, len); if (fos.size() >= maxsize) { resMap.put("error_mes", "size_over"); resMap.put(SpsConstant.PIC_DESC, prevName); return resMap; } } byte[] content = fos.toByteArray(); //业务代码... } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); resMap.put(SpsConstant.PIC_DESC, picDesc); } finally { close(bis, fos, bai, resMap); fos = null; bis = null; bai = null; } return resMap; }
private void close(BufferedInputStream bis, ByteArrayOutputStream fos, ByteArrayInputStream bai, Map<String, Object> resMap) { if (null != fos) { try { fos.close(); } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); } } if (null != bis) { try { bis.close(); } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); } } if (null != bai) { try { bai.close(); } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); } } }
文件上传的代码啊,没有多少东西啊。。为什么放到生产环境上就会OOM啊。大神给指点下呢,我知道这个方案不是很好,应该在框架上或者前段来判断文件大小,但是现在不能有太多的代码改动,先分析出来问题哈。。。。
压测没有问题,我本地各种线程并发都试过,没出现问题啊。。为什么生产上就会有这个问题呢?
报OOM的就是
byte[] content = fos.toByteArray();
,fos太大??不合理啊?
理论上如果很大的话上面循环的时候有判断啊,现在没有走上面的,但是下面OOM了,finally也释放了啊。请大神指点~~~
相关推荐
程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了, 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统还是很常见的解决的方法
内存溢出配置,内存溢出配置内存溢出配置内存溢出配置
JAVA内存溢出问题总结
解决内存溢出的问题,在使用myeclipse时候,经常遇到内存溢出的问题。
完美解决java读取excel内存溢出问题,希望可以帮到大家
处理bitmap内存溢出问题
myeclipse内存溢出问题解决方案整理!介绍认识
内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出产生原因多种多样,当内存严重不足时,内核...
软件开发 数据库 内存泄露 内存溢出
绝对原创,这是我在项目中解决大数据Excel导入时内存溢出问题而编写的Excel行级解析器。同时支持Excel-2003和Excel-2007,excel-2003解析采用poi的eventusermodel模式实现,2007采用xmlreader实现,经项目验证,...
android从相册里面选择某张图片或调用相机拍照后对图片剪切,不会内存溢出!!亲测的!!!剪切的时候内存溢出太坑爹了!!!图片剪切的demo网上不少,我下载的几个都有内存溢出,只好自己改改。并且7.0不会崩溃。...
一个Qt内存溢出检测小工具,(需要VLD支持)。
内存溢出问题是参加kaggle比赛或者做大数据量实验的第一个拦路虎。 以前做的练手小项目导致新手产生一个惯性思维——读取训练集图片的时候把所有图读到内存中,然后分批训练。 其实这是有问题的,很容易导致OOM。...
android 图片下载 有效解决内存溢出问题 android 图片下载 有效解决内存溢出问题
eclipse tomcat启动,内存溢出问题
一个POI导出Excel万级数据分页实现 解决内存溢出问题 完整的 project demo 有数据库dmp文件
针对读取、生成excel内存溢出问题,包括工具类和具体的实现
该文档整合了网上所有的关于描述was(webSphere)下生成许多phd文件的...产生该类文件的原因包括JVM设置的最小内存太小,以至于内存溢出,还有就是程序漏洞,使得JVM内存溢出,文档中叶介绍了websphere的检测工具的使用
粘贴到Tomcat中或Eclipse里用以解决内存溢出问题