我的Jetty服务器上传文件的问题比较严重 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个密钥,而且我在本地主机上看不到问题,或者在远程计算机上看不到小文件。
此上传通过https(如果相关)与CA签名证书进行,并且谷歌浏览器接受为安全的私有连接。
设置服务器连接器时,我在发生任何问题的情况下更改了空闲超时值
httpsConnector.setIdleTimeout(300000)
尽管做了这些修改,我还没有克服这个问题,我感谢您提出的任何建议。
EDIT1-SOLVED-
我相信我已经分配了4G的堆空间,因此这是一个非常规的错误。原来我在localhost上运行的版本来自intellij,它有自己关于堆大小的想法。
在远程机器上运行" sbt run"我忽略了在我的build.scala中包含fork选项。因此,sbt忽略了我的jvm选项(无法在正在运行的jvm上设置选项)而且我运行的是300mb堆。
答案 0 :(得分:2)
您的跟踪显示内存不足异常。显然上传文件时内存不足。
您是否尝试过增加堆大小?这是远程服务器和本地服务器之间的区别吗?