linux 传输大文件大小,Linux大文件传输(转)
我們經(jīng)常需要在機(jī)器之間傳輸文件。比如備份,復(fù)制數(shù)據(jù)等等。這個(gè)是很常見,也是很簡單的。用scp或者rsync就能很好的完成任務(wù)。但是如果文件很大,需要占用一些傳輸時(shí)間的時(shí)候,怎樣又快又好地完成任務(wù)就很重要了。在我的測試用例中,一個(gè)最佳的方案比最差的方案,性能提高了10倍。
復(fù)制文件
如果我們是復(fù)制一個(gè)未壓縮的文件。這里走如下步驟:
壓縮數(shù)據(jù)
發(fā)送到另外一臺機(jī)器上
數(shù)據(jù)解壓縮
校驗(yàn)正確性
這樣做會很有效率,數(shù)據(jù)壓縮后可以更有效的利用帶寬
使用ZIP+SCP
我們可以通過ZIP+SCP的組合實(shí)現(xiàn)這個(gè)功能。
gzip -c /home/yankay/data | ssh yankay01 "gunzip -c - > /home/yankay/data"
這條命令是將/home/yankay/data經(jīng)過GZIP壓縮,通過ssh傳輸?shù)統(tǒng)ankay01的機(jī)器上。
data文件的大小是1.1GB,經(jīng)過Zip壓縮后是183MB,執(zhí)行上面的命令需要45.6s。平均吞吐量為24.7MB/s
我們會發(fā)現(xiàn)Scp也有壓縮功能,所以上面的語句可以寫成
scp -C -c blowfish /home/yankay/data yankay01:/home/yankay/data
這樣運(yùn)行效果是相同的,不通之處在于我使用了blowfish算法作為Scp的密匙算法,使用這個(gè)算法可以比默認(rèn)的情況快很多。單單對與scp,使用了blowfish 吞吐量是62MB/s,不使用只有46MB/s。
可是我執(zhí)行上面一條命令的時(shí)候,發(fā)現(xiàn)還是需要45s。平均吞吐量還為24MB/s。沒有絲毫的提升,可見瓶頸不在網(wǎng)絡(luò)上。
那瓶頸在哪里呢?
性能分析
我們先定義幾個(gè)變量
壓縮工具的壓縮比是 CompressRadio
壓縮工具的壓縮吞吐是CompressSpeed MB/s
網(wǎng)絡(luò)傳輸?shù)耐掏率?NetSpeed MB/s
由于使用了管道,管道的性能取決于管道中最慢的部分的性能,所以整體的性能是:
speed=min(NetSpeed/CompressRadio,CompressSpeed)
當(dāng)壓縮吞吐較網(wǎng)絡(luò)傳輸慢的時(shí)候,壓縮是瓶頸;但網(wǎng)絡(luò)較慢的時(shí)候,網(wǎng)絡(luò)傳輸/吞吐 是瓶頸。
根據(jù)現(xiàn)有的測試數(shù)據(jù)(純文本),可以得到表格:
壓縮比
吞吐量
千兆網(wǎng)卡(100MB/s)吞吐量
千兆網(wǎng)卡吞吐量,基于ssh(62MB/s)
百兆網(wǎng)卡(10MB/s)吞吐量
ZLIB
35.80%
9.6
9.6
9.6
9.6
LZO
54.40%
101.7
101.7
101.7
18.38235294
LIBLZF
54.60%
134.3
134.3
113.5531136
18.31501832
QUICKLZ
54.90%
183.4
182.1493625
112.9326047
18.21493625
FASTLZ
56.20%
134.4
134.4
110.3202847
17.79359431
SNAPPY
59.80%
189
167.2240803
103.6789298
16.72240803
NONE
100%
300
100
62
10
可以看出來。在千兆網(wǎng)卡下,使用QuickLZ作為壓縮算法,可以達(dá)到最高的性能。如果使用SSH作為數(shù)據(jù)傳輸通道,則遠(yuǎn)遠(yuǎn)沒有達(dá)到網(wǎng)卡可以達(dá)到的最佳性能。在百兆網(wǎng)卡的情況下,各個(gè)算法相近。對比下來QuickLZ是有優(yōu)勢的。
對于不同的數(shù)據(jù)和不同的機(jī)器,可以得出不同的最佳壓縮算法。但有一點(diǎn)是肯定的,盡量把瓶頸壓在網(wǎng)絡(luò)上。對于較慢的網(wǎng)絡(luò)環(huán)境,高壓縮比的算法會比較有優(yōu)勢;相反對于較快的網(wǎng)絡(luò)環(huán)境,低壓縮比的算法會更好。
結(jié)論
根據(jù)上面的分析結(jié)果,我們不能是用SSH作為網(wǎng)絡(luò)傳輸通道,可以使用NC這個(gè)基本網(wǎng)絡(luò)工具,提高性能。同時(shí)使用qpress作為壓縮算法。
scp /usr/bin/qpress yankay01:/usr/bin/qpress
ssh yankay01 "nc -l 12345 | qpress -dio > /home/yankay/data" &
qpress -o /home/yankay/data |nc yankay01 12345
第一行是將gpress安裝到遠(yuǎn)程機(jī)器上,第二行在遠(yuǎn)程機(jī)器上使用nc監(jiān)聽一個(gè)端口,第三行壓縮并傳送數(shù)據(jù)。
執(zhí)行上面的命令需要2.8s。平均吞吐量為402MB/s,比使用Gzip+Scp快了16倍!!
根據(jù)上文的公式,和自己的數(shù)據(jù),可以繪出上面的表格,就可以選擇出最適合的壓縮算法和傳輸方式。達(dá)到滿意的效果。如果是一個(gè)長期運(yùn)行的腳本的話,這么做是值得的。
linux大文件傳輸
Mysql復(fù)制,初始化服務(wù)器,備份/還原等大文件復(fù)制是很常見的任務(wù),他們完成的實(shí)際任務(wù)可以概括為: 1,(可選)壓縮文件 2,發(fā)送文件 3,解壓文件 4,驗(yàn)證文件一致性 下面介紹幾種方法: 1,最簡單 ...
WCF大文件傳輸服務(wù)
由于項(xiàng)目需要,自己寫一個(gè)基于WCF的大文件傳輸服務(wù)雛形.覺得有一定的參考價(jià)值,因此放在網(wǎng)上分享. 目前版本為v1.1特點(diǎn)如下: 1.文件傳輸端口為18650 2.上傳和下載文件 3.支持獲取文件傳輸狀 ...
轉(zhuǎn):wcf大文件傳輸解決之道(2)
此篇文章主要是基于http協(xié)議應(yīng)用于大文件傳輸中的應(yīng)用,現(xiàn)在我們先解析下wcf中編碼器的定義,編碼器實(shí)現(xiàn)了類的編碼,并負(fù)責(zé)將Message內(nèi)存中消息轉(zhuǎn)變?yōu)榫W(wǎng)絡(luò)發(fā)送的字節(jié)流或者字節(jié)緩沖區(qū)(對于發(fā)送方而言 ...
轉(zhuǎn):wcf大文件傳輸解決之道(1)
首先聲明,文章思路源于MSDN中徐長龍老師的課程整理,加上自己的一些心得體會,先總結(jié)如下: 在應(yīng)對與大文件傳輸?shù)那闆r下,因?yàn)閣cf默認(rèn)采用的是緩存加載對象,也就是說將文件包一次性接受至緩存中,然后生成 ...
Linux大文件分割splite
/********************************************************************** * Linux大文件分割splite * 說明: * 編 ...
WCF大文件傳輸【轉(zhuǎn)】
http://www.cnblogs.com/happygx/archive/2013/10/29/3393973.html WCF大文件傳輸 WCF傳輸文件的時(shí)候可以設(shè)置每次文件的傳輸大小,如果是小 ...
利用Socket進(jìn)行大文件傳輸
分類: WINDOWS 最近接觸到利用socket進(jìn)行大文件傳輸?shù)募夹g(shù),有些心得,與大家分享.首先看看這個(gè)過程是怎么進(jìn)行的(如下圖):??? ? 所以,我們需要三個(gè)socket在窗體加載的時(shí)候初始化: ...
AetherUpload大文件傳輸
AetherUpload-Laravel是laravel框架下的一個(gè)大文件傳輸組件 github:https://github.com/peinhu/AetherUpload-Laravel 文件傳輸 ...
Linux命令-文件傳輸
Linux命令-文件傳輸 Linux lprm命令 Linux lprm命令用于將一個(gè)工作由打印機(jī)貯列中移除 尚未完成的打印機(jī)工作會被放在打印機(jī)貯列之中,這個(gè)命令可用來將常未送到打印機(jī)的工作取消.由于 ...
隨機(jī)推薦
SharePoint 2013 SP1發(fā)布了
好消息,SharePoint 2013 SP1終于發(fā)布了: SP1說明:http://support.microsoft.com/kb/2880552 下載頁面:http://www.microsof ...
poj 1088 dp **
鏈接:點(diǎn)我 記憶化搜索很好寫 #include #include #include #include< ...
Eclipse搭建Android5.0應(yīng)用開發(fā)環(huán)境 “ndk-build”:launchingfailed問題解決
Eclipse搭建Android5.0應(yīng)用開發(fā)環(huán)境 "ndk-build":launchingfailed問題解決 詳細(xì)參考http://blog.csdn.net/loongem ...
64位Win10系統(tǒng)安裝Mysql5.7.11
最近在裝了64位Win10系統(tǒng)的mac book筆記本上用mysql-installer-community-5.7.11.0安裝Mysql5.7.11,在配置mysql server時(shí)老是卡住,報(bào)錯(cuò) ...
ES6 Module export與import復(fù)合使用
export與import復(fù)合使用 基本語法 export {...} from '文件'; 等價(jià)于 import {...} from "文件": export {...} 先加 ...
全局Ajax加載時(shí)呈現(xiàn)Loading
全局設(shè)置: 1 2 3 4 5 $(document).bind("ajaxSend",?function?() { ????????$("#loading_messag ...
如何在eclipse中對項(xiàng)目進(jìn)行重新編譯
有時(shí)由于eclipse異常關(guān)閉,當(dāng)我們重啟Eclipse,在啟動項(xiàng)目時(shí),會報(bào)錯(cuò),說:ClassNotFound類似的錯(cuò)誤,引起這種問題的原因可能是由于,Eclipse異常關(guān)閉引起的. 解決:在一個(gè)項(xiàng)目 ...
BZOJ 4765 普通計(jì)算姬 (分塊 + BIT)
4765: 普通計(jì)算姬 Time Limit:?30 Sec??Memory Limit:?256 MBSubmit:?1547??Solved:?329[Submit][Status][Discus ...
CentOS 6.9 下安裝DB2
操作系統(tǒng):CentOS6.9_x64 DB2安裝文件: db2_v101_linuxx64_expc.tar.gz 安裝數(shù)據(jù)庫 tar zxvf db2_v101_linuxx64_expc.tar. ...
總結(jié)
以上是生活随笔為你收集整理的linux 传输大文件大小,Linux大文件传输(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里校招在线编程题
- 下一篇: 如何利用油猴脚本(tampermonke