关于大量小文件拷贝的那些事儿(一)

因为公司项目涉及到了从不同服务器拷贝大量小图片的工作,所以做了个测试来测拷贝小文件的性能。

测试了76000个小文件,每个大小200K-300K左右,一共87250M

两台都是linux centos7.5 内存140G ,cpu 为intel E5-2620,千兆网卡。

磁盘大小为500G,型号是Seagate Constellation ES的ST500nm0011

为排除系统缓存的影响,每次测试前,都执行

sync

echo 3 > /proc/sys/vm/drop_caches

这两条命令清除缓存

不同的传递方式性能如下:

| 方式         | 耗时             | 平均速率      |命令                                                                               |

| ------------- |:----------------:| -----------------:|---------------------------------------------------------------------:|

| scp           | 00:59:38     |24.2M/S         |scp -r srcDir destIp:destDir                                         |

| rsync        | 00:14:59      |96.9M/S        |rsync -aW -e ssh srcDir destIp:destDir                      |

| tar             | 00:14:58     |96.9M/S        | ssh destIp `tar -xf - -C destDir`                                   |


有同事指出,先打包(由于是图片,再次压缩没有多大的意义,不压缩只打包,大小增大为91075M),再scp是不是会快一些。我也测试了一下这种方案的性能,数据如下:

| 过程         | 耗时               | 平均速率    |命令                                                                             |

| ------------- |:------------------:| --------------:|--------------------------------------------------------------------:|

| 打包          | 00:50:56       |                    |tar -cf srcDir.tgz srcDir                                               |

| 传输(scp)  | 00:15:32       |97.1M/s     |scp srcDir.tgz destIp:destDir                                     |

| 解包          | 00:28:04        |                  |tar -xf destIp:destDir/destDir.tgz -C destIp:destDir  |

网上有很多资料都说ftp的方式很慢,多线程下载小文件的方式我没有(如果以后有时间,我会测的),但下载打包后的整个大文件我测了一下,性能如下:

| 传输(ftp)    | 00:13:54        |108.4M/s         |ftp get dstDir.tgz                                                  |

结论:

1.linux系统跨网络拷贝小文件,打包后再传递的方式很不可取,因为要来回写磁盘,打包落盘的时间比传输长。

2.rsync和tar的方式都比较快,差距不大。scp的方式慢。

参考链接

https://serverfault.com/questions/18125/how-to-copy-a-large-number-of-files-quickly-between-two-servers

你可能感兴趣的:(关于大量小文件拷贝的那些事儿(一))