Копирование файла Java с подключенного сетевого диска медленнее, чем копирование файлового менеджера ОС - PullRequest
0 голосов
/ 08 мая 2018

Вот сценарий: у нас есть NAS с наборами данных, которые необходимо скопировать на локальный диск для более быстрой обработки.Наборы данных имеют размер от 2 до 15 ГБ, и каждый набор данных находится в отдельной папке на NAS.

Чтобы скопировать на локальный диск, я вызываю:

FileUtils.copyDirectory(nasDir, localDiskDir);

Где два параметра Fileэкземпляров.nasDir - это подключенный к сети SMB-диск.При использовании Java для копирования набора данных максимальная скорость передачи составляет около 8 МБ / с.Одна и та же копия с помощью Windows Explorer или Nautilus, в зависимости от сервера, достигает 34-35 МБ / с с продолжительностью .

Кто-нибудь знает, почему это так, и вишня наторт, как быстрее скопировать каталог через java?Даже если мы на 5-10% медленнее, чем было бы приемлемо, текущая разница, тем не менее, указывает на значительное снижение производительности где-то.

EDIT : изначально считалось, что это может быть связано сбиблиотека ввода / вывода Apache Commons, но тестирование с https://docs.oracle.com/javase/tutorial/essential/io/examples/Copy.java показывает, что на некотором уровне это является более фундаментальной проблемой.

...