Вот сценарий: у нас есть 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 показывает, что на некотором уровне это является более фундаментальной проблемой.