Java -Out of Memory将文件从UI传递到webService时

时间:2014-07-29 17:11:04

标签: java javascript ajax out-of-memory

大家好,我有一个工作正常的WS,需要用于其他应用程序。此应用程序上传20mb .CSV文件。如果我将文件更改为10mb,则文件会进入WS并继续处理。如果我在流式传输到WS时将文件保留为20mb +,我会在日志中获得TOMCAT内存之前甚至进入该java类:

有关此的任何建议吗?

INFO   | jvm 2     | java.lang.OutOfMemoryError: Java heap space
STATUS | wrapper   | Filter trigger matched.  Restarting JVM.

使用JS与休息服务进行ajax调用:

JS:

var params={};
    params.upldFile= $("#inputUploadFile").val());

var options = {
         url: 'WS/TEMP',
         data: params,
         dataType:"text",
         success:function(successJson) 

     };

    $('#TEST').ajaxForm(options);
     $('#TEST').ajaxSubmit(options); 

JAVA

@Path("TEMP")
@POST
@Produces({  "application/json" })
@Consumes("multipart/form-data)
public Response test(
  @FormDataParam("inputUploadFile") InputStream iStream,
  @FormDataParam("inputUploadFile") FormDataContentDisposition detailFile) {

  //not making it here
  }

2 个答案:

答案 0 :(得分:0)

每当泄漏的内存填满堆区域中的所有可用内存并且垃圾收集无法清除它时,就会抛出“java.lang.OutOfMemoryError:Java堆空间”。

尝试增加此类资源的可用性。当您的应用程序没有足够的Java堆空间内存来正常运行时,修复它就像更改JVM启动配置和添加(或增加(如果存在)以下内容一样简单:

-Xmx1024m

或者您可以免费试用Plumbr。当我们找到java.lang.OutOfMemoryError的原因时,您将看到问题的确切位置以及解决方案指南。

答案 1 :(得分:0)

我使用byte[]代替InputStream。这似乎可以解决20mb文件的问题,因为我们的QA服务器只有124 MB。