Как справиться с нехваткой прямой памяти при загрузке больших файлов с помощью Vert.x & Netty? - PullRequest
0 голосов
/ 07 января 2020

У меня есть веб-сервис Vert.x, который иногда загружает большие ZIP-файлы с AWS S3. После загрузки архив распаковывается, а отдельные файлы повторно загружаются в AWS S3. Веб-служба размещается как экземпляр t2.large (8 ГБ памяти) в AWS Elasti c Beanstalk. Приложение Java в настоящее время сконфигурировано с 2-4 ГБ пространства кучи, а размер ZIP-файлов будет не более 10 ГБ (но большинство из них будет ближе к 2-4 ГБ максимум).

Когда Приложение пытается загрузить ZIP-файлы размером более 2 ГБ, либо первоначальная загрузка ZIP-файла, либо повторная загрузка отдельных файлов всегда завершается неудачно с трассировкой стека, подобной следующей:

Caused by: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 1895825439, max: 1908932608)

После некоторых исследований выяснилось, что Vert.x использует Netty для ускорения сетевого ввода-вывода, который, в свою очередь, использует прямую память для повышения производительности загрузки. Похоже, что прямая память освобождается недостаточно быстро, что приводит к исключениям нехватки памяти, как указано выше.

Самое простое решение - просто увеличить размер экземпляра до 16 ГБ t2.xlarge и выделить больше прямой памяти во время выполнения (например, -XX:MaxDirectMemorySize), но я хотел бы сначала изучить другие решения. Есть ли способ программно заставить Netty освободить прямую память после того, как она больше не используется? Можно ли добавить дополнительную конфигурацию Vert.x, которая может облегчить эту проблему?

1 Ответ

1 голос
/ 08 января 2020

Пожалуйста, отметьте это

github.com / aws / aws -sdk- java -v2 / Issues / 1301

Мы обнаружили проблему в SDK где это может вызвать чрезмерное использование буфера и в конечном итоге OOM при использовании s3 asyn c клиента для загрузки большого объекта в файл. Исправление # 1335 доступно в 2.7.4. Не могли бы вы попробовать с последней версией? Не стесняйтесь открыть снова, если вы продолжаете видеть проблему. "- AWS PS 21 час go Удалить

...