scala – 内存较大错误,文件上传量较大

我有一些问题,我的码头服务器上传文件较大

 
Trace.

我正在上传为Multipart / form-data,并使用scalatra的FileUploadSupport从请求中获取文件(如下所示)

class foo extends ScalatraServlet with FileUploadSupport {
  configureMultipartHandling(MultipartConfig(maxFileSize = Some(1073741824)))
  post("/upload") {
    //{1}
    ... //(VALIDATION AND USER LOGIN WITH SCENTRY)
    ... //(Transactionally posts meta info to Elasticsearch and writes video to filesystem)
  }
}

我有一些测试,如果在localhost上运行服务器,使用较小的文件~50MB甚至3-400MB文件都没有问题.

但是,当我在远程计算机上托管我的服务器时,我遇到了一些特定于传输的问题.而且,(调试时),我从未到达{1}的断点

研究我发现的问题this这表明重用相同的http连接可能会导致问题.根据他们的建议,我将以下内容添加到我的servlet中,并在分析响应头时我可以确认它“已接受”:

before("/*") {
  response.addHeader("Connection", "close")
}

我的研究还显示了有太多表单键的一些问题,但是有问题的表单只有4个键,我没有看到localhost上的问题或远程机器上的较小文件.

此上传通过https(如果相关)使用CA签名证书进行,并且谷歌浏览器将其作为安全的专用连接接受.

设置服务器连接器时,我更改了空闲超时值,以防出现任何问题

httpsConnector.setIdleTimeout(300000)

尽管有这些修改,我还没有克服这个问题,我感谢您提出的任何建议.

EDIT1,SOLVED-

我相信我已经分配了4G的堆空间,因此这是一个非常重要的错误.原来我在localhost上运行的版本是通过intellij,它有自己的堆大小的想法.

当使用“sbt run”在远程计算机上运行它时,我忽略了在我的build.scala中包含fork选项.因此sbt忽略了我的jvm选项(无法在运行的jvm上设置选项)并且我运行的是300mb堆.

最佳答案 您的跟踪显示内存不足异常.显然,上传文件时内存不足.

您是否尝试过增加堆大小?这是远程服务器和本地服务器之间的区别吗?

点赞