У меня возникли проблемы с большими загрузками файлов на мой сервер причала Trace.Ошибка памяти при больших загрузках файлов
Я загрузив как многоэлементная/форм-данных, а также извлечения файла из запроса с использованием 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)
}
}
У меня есть батареи тестов и не имеют никакой проблемы работает это с меньшим файлы ~ 50 МБ и даже 3-400 МБ файлов при запуске сервера на localhost.
Тем не менее, когда я размещаю свой сервер на удаленной машине, у меня есть некоторые транспортные проблемы. И, (при отладке), я никогда не достигаю точки останова в {1}
Исследование проблемы, которую я нашел this Что предполагает повторное использование одного и того же http-соединения, может вызвать проблему. После их советов я добавил ниже мой сервлет и на анализ заголовков ответа, я могу подтвердить его «взял»:
before("/*") {
response.addHeader("Connection", "close")
}
Моих исследования также показали некоторые проблемы с наличием слишком много ключей формы, однако данная форма имеет только 4 ключа, и я не вижу проблемы на локальном хосте или с меньшими файлами на удаленном компьютере.
Эта загрузка происходит через https (в случае, если это имеет значение) с сертификатом CA, подписанным и принятым Google Chrome как безопасное частное соединение.
При настройке соединителя сервера, я изменил значение для времени ожидания в случае, который вызывает какие-либо проблемы
httpsConnector.setIdleTimeout(300000)
Несмотря на эти модификации, я до сих пор решить эту проблему, и я признателен за любые советы вы могли бы иметь ,
EDIT1-SOLVED-
Я полагал, я был уже назначен 4G кучного пространства и, следовательно, это была ошибка nonesene. Оказывается, версия, которую я запускал на localhost, была через intellij, у которой есть свои идеи о размере кучи.
при запуске его на удаленном компьютере с «sbt run» Я забыл включить опцию fork в мою build.scala. следовательно, sbt проигнорировал мои параметры jvm (возможно, невозможно установить параметры на запущенном jvm), и я работал с кучей в 300 Мб.
Ваш ['MultipartConfig'] (http://docs.oracle.com/javaee/7/api/javax/servlet/annotation/MultipartConfig.html) должен указывать' location', чтобы файлы записывались/читались из этого места на вашем локальном диске (таким образом, не требуя хранения памяти для хранения всего содержимого файла). –
Спасибо, я сделал это изменение, а также установил размер кучи – Richard