Низкая производительность IOUtils.copy () при загрузке файлов через commons-fileupload - PullRequest
0 голосов
/ 27 апреля 2020

В одном из моих контроллеров Spring Boot я получаю закачки файлов (до 500 МБ) следующим образом:

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);

while (iter.hasNext()) {
    FileItemStream item = iter.next();

    if (item.isFormField()) {
    } else {
        try (InputStream in = item.openStream(); OutputStream out = new FileOutputStream("path-to-file")) {
            IOUtils.copy(in, out);
        }
    }
}

Файл сохраняется в локальной файловой системе Ubuntu 18.04 и работает хорошо .

Проблема в том, что скорость загрузки смехотворно низкая, в среднем менее 2 МБ / с. Кроме того, загрузка процессора составляет около 20% во время загрузки.

Когда я копирую файл с scp в тот же ящик, я максимально увеличиваю при загрузке моего inte rnet соединения 50 Мбит.

Почему загрузка этого файла такая медленная?

На самом деле я не вижу улучшения скорости по сравнению с моей первоначальной реализацией, использующей механизм загрузки на основе MultipartFile в Spring (за исключением того, что я больше не получаю ошибки и ошибки OOM с тех пор, как перешел на commons-fileupload)

...