我有一些问题,我的码头服务器上传文件较大
我正在上传为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堆.
最佳答案 您的跟踪显示内存不足异常.显然,上传文件时内存不足.
您是否尝试过增加堆大小?这是远程服务器和本地服务器之间的区别吗?