Высокое использование памяти при загрузке многочастного файла в Amazon S3 через потоковую передачу? - PullRequest
0 голосов
/ 05 октября 2019

Приведенный ниже метод в моем приложении Java Spring направляет поток и загружает файл в корзину Amazon S3. Я исследовал, что использование потоков сделает загрузку больших файлов (> 100 МБ видео для моего случая использования) более эффективной с точки зрения памяти. При тестировании метода с файлом размером 25 МБ использование памяти моим приложением Java Spring в кластерной конфигурации Kubernetes увеличилось на 200 МБ! Я также попробовал файл размером 200 МБ, и память снова выросла до ~ 2 ГБ. Не было выброшено исключений из памяти, но использование памяти не уменьшается. Почему это происходит?

public void uploadFile(MultipartFile file, String saveFileName) {
        try {
            ObjectMetadata metadata = new ObjectMetadata();

            if (file.getContentType() != null){
                om.setContentType(file.getContentType());
            }

            metadata.setContentLength(file.getSize());

            saveFileName = saveFileName.replaceAll(" ", "");

            InputStream stream = file.getInputStream();

            PutObjectRequest request = new PutObjectRequest(bucketName, saveFileName, stream, metadata);
            request = request.withMetadata(om);

            s3client.putObject(request);

            stream.close();
        } catch (AmazonClientException | IOException exception) {
            // handle exception
        }
    }

1 Ответ

0 голосов
/ 06 октября 2019

Существует несколько способов обработки больших файлов.

  1. Запись байтового массива на диск и загрузка в S3 с помощью фоновой задачи.
  2. Сохранение в памяти и загрузка объектанапрямую (плохой вариант, если вы не установили очень низкий лимит загрузки файлов)

взгляните на это git-репо о том, как можно достичь вышеуказанными методами

Я не вижу здесь вашего варианта использования. Но если вы также обрабатываете пользовательский интерфейс, рассмотрите возможность загрузки файлов непосредственно из пользовательского интерфейса, используя предварительно подписанные URL-адреса S3 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...