HustleCoder
@HustleCoder

Как избежать Out Of Memory Error?

Есть приложение на Kotlin + Spring Boot, в нем есть метод, который перекачивает файл из одного хранилища (допустим, S3) в другое (через REST-метод). Логика простая - сначала загружаем контент файла в хип, потом выгружаем его в целевое хранилище, то есть какое-то время весь файл находится в хипе. Проблема возникает, когда метод одновременно вызывается для множества файлов, тогда в хип одновременно загружается большое количество контента и возникает Out Of Memory Error.
Как бы вы решали данную проблему? Может есть какие-то бест практисы?
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Я такую задачу решал реактивностью. У меня не Spring, правда, но с Reactor'ом тоже решается элементарно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Может, Webflux + tus? При наличии tus не страшен Out Of Memory Error, ибо потом можно будет докачать.
Ответ написан
Комментировать
xez
@xez Куратор тега Java
TL Junior Roo
xmx настроить - первым делом
Ответ написан
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Вообще, для данного процесса правильнее сразу же отправлять файл в другое хранилище по мере получения или получать файл маленькими блоками и сразу же их отправлять. Ну или хотя бы сохранять файл на диск, если памяти мало. Ну и конечно, перед окончательным сохранением файла проверять его контрольную сумму и если не совпадает с исходным - повторять закачку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы