天天看點

性能調優-ossutil 調優

ossutil 能做什麼

功能概述

ossutil 是 go 編寫的指令行高效快捷工具,工具執行效率、支援功能、容錯功能無疑是運維必備首選,同時在弱網條件下支援探測模式,測試用戶端的網絡上下行速率;

  • ossutil 專司于高并發大檔案或小檔案讀寫的場景,同時支援大檔案内部進行分片時的并發;
  • 操作檔案時可以支援 include exinclude 參數,指定哪些字尾的檔案可被操作;
  • 隻顯示目前的層級的目錄,可選擇性的進行遞歸;
  • 伴随 Linux 系統本身的 crontab 使用支援,強制更新 -f -u 參數;
  • 限制 ossutil 的操作速度;

支援選項

Commands:

  • mb cloud_url [options]
    建立Bucket           
  1. [cloud_url] [options]
    列舉Buckets或者Objects           
  2. cloud_url [options]
    删除Bucket或Objects           
  3. 顯示bucket或者object的描述資訊           
    set-acl cloud_url [acl] [options]
    設定bucket或者objects的acl           
    set-meta cloud_url [meta] [options]
    設定已上傳的objects的元資訊           
  4. src_url dest_url [options]
    上傳,下載下傳或拷貝Objects           
  5. 恢複冷凍狀态的Objects為可讀狀态           
    create-symlink cloud_url target_url [options]
    建立符号連結           
    read-symlink cloud_url [options]
    讀取符号連結檔案的描述資訊           
  6. cloud_url [meta] [options]
    生成object下載下傳連結           
  7. file_name [options]
    探測指令,支援多種功能探測           
  8. dir_name [options]
    建立一個目錄,在oss中目錄名字有字尾字元'/'           
  9. bucket_url [local_xml_file] [options]
    設定、查詢或者删除bucket的cors配置           
  10. src_bucket_url target_bucket_url [options]
    設定、查詢或者删除bucket的log配置           
  11. bucket_url referer [options]
    設定、查詢或者删除bucket的referer配置           
  12. oss_object uploadid [options]
    列出沒有完成分塊上傳的object的分塊資訊           
  13. bucket_url [options]
    擷取bucket所有未完成上傳的multipart object的分塊大小以及總和           
  14. local_file_name oss_object [options]
    将本地檔案内容以append上傳方式上傳到oss中的appendable object中           
  15. object [options]
    将檔案内容輸出到标準輸出           
    bucket-tagging bucket_url [tag_parameter] [options]
    設定、查詢或者删除bucket的tag配置           
    bucket-encryption bucket_url [options]
    設定、查詢或者删除bucket的encryption配置           
    cors-options oss_url [options]
    向oss發送http options請求,用于CORS檢測           
  16. bucket_url local_xml_file [options]
    設定、查詢或者删除bucket的lifecycle配置           
  17. 設定、查詢或者删除bucket的website配置           
    bucket-qos bucket_url [local_xml_file] [options]
    設定、查詢或者删除bucket的qos配置           
    user-qos [local_file] [options]
    查詢使用者的qos配置           
    bucket-versioning bucket_url [versioning_parameter] [options]
    設定、查詢bucket的versioning配置           
  18. 擷取bucket或者指定字首(目錄)所占的存儲空間大小           
    bucket-policy bucket_url [local_json_file] [options]
    設定、查詢或者删除bucket的policy配置           
    request-payment bucket_url [payment_parameter] [options]
    設定、查詢bucket的通路者付費配置           
    object-tagging cloud_url [tag_parameter] [options]
    設定、查詢或者删除object的tag配置
               

Additional Commands:

help [command]

擷取指令的幫助文檔           

config [options]

建立配置檔案用以存儲配置項           

hash file_url [options]

計算本地檔案的crc64或md5           

update [options]

更新ossutil
               

場景分類

ossutil help

拷貝單個小文檔案

ossutil cp $localfile oss://$bucket/ -i $AccesskeyID -k $AccesskeySecretkey -e $endpoint

遞歸拷貝本地目錄小檔案到 oss

ossutil cp -r $local_path oss://$bucket/ -i $AccesskeyID -k $AccesskeySecretkey -e $endpoint

拷貝單個大文檔案

ossutil cp $localfile oss://$bucket/ --part-size=50000000 --bigfile-threshold=54857600 --parallel=5 -i $AccesskeyID -k $Accesskey Secretkey -e $endpoint

遞歸拷貝本地目錄大檔案到 oss

ossutil cp $localfile oss://bucket/ --part-size=50000000 --bigfile-threshold=54857600 --jobs=20 --parallel=5 -i $AccesskeyID -k $AccesskeySecretkey$ -e $endpoint

常見問題

oss 上傳下載下傳慢

1、如果能穩定複現可以用 --loglevel 參數 debug 請求過程,将記錄的 OSS 傳回的 requestID 回報到阿裡雲售後排查;

2、客戶可以使用 probe 探測指令生成一個網絡探測報告,通過檢測結果看下用戶端網絡是否存在慢請求的問題;

3、如果用戶端是 ECS ,并且和 OSS 是同 region ,可以使用内網的 endpoint 進行傳輸,内網傳輸速率一般可以達到 50M -100M 左右(自己測試),比如北京的 OSS 内網 endpoint 就是 oss-cn-beijing-internal.aliyuncs.com

4、用戶端可以在使用上面推薦的大檔案見分片上傳,下載下傳的功能,如果檔案數量多,可以同時增加并發參數提高網絡吞吐;

5、如果用戶端還是存在慢的問題,可以用 wireshark 或者 tcpdump 抓包分析下找出慢的瓶頸;

ossutil 出現 skip 情況

[root@iZ2Sv4olcc4Z opt]# echo “testlil” >  dskydb/test.txt
[root@iZ25v4olcc4Z opt]# ./ossutil64 cp -rt -c ~/.ossuti.Lcofig dskyclb/test.txt oss://gres/test.txt
Succeed: Total nun: 1, $ze: 30. OK nun: 1(upload 1 files).
0.372650(s) elapsed I
[root@iZ2Sv4olcc4Z opt] echo " ttest222r" >> dskydb/test.txt
[root@iZ2Sv4olcc4Z opt]. /ossutil64 cp —u —c ~/.ossutilconfig cbkydb/test.txt oss://gres/test.txt
Succeed: Total num: 1, ize: 38. OK nun: l(skip 1 files), Skip sin 38.
0.252878(s) elapsed           

1、使用 -u 強制更新時,重新對所有的上傳檔案和原的進行一次比對,發現美有更改的情況就會跳過,有發生更改的就會觸發上傳進行覆,正常情況。

2、遇到這種情況可以看下本地的 log 哪些檔案被跳過了,将 oss 存儲的檔案和本地檔案做個 MD5 比對確定檔案是一緻。

3、指令:./ossutil64 cp -u -r -f aa.test oss://alihua -i $accesskeyID -k $accesskeyIDSecret -e $endpoint

ossutil 通路出現 403

性能調優-ossutil 調優

如圖使用者在操作解凍檔案的過程中出現 403,可能與兩個原因有關系

1、使用者使用的子賬号操作檔案,權限不夠。

2、使用者的檔案是違禁内容被封禁掉了。

3、遇到 403 時,遞歸解凍會中斷不會繼續。這種現象是正常的,工具在設計之初就是考慮到如果檔案遇到 403 的話,代表沒有權限操作該檔案,那麼通過該賬号下的其他檔案也操作不了,是以就會中斷退出。

通路 OSS 出現 400

性能調優-ossutil 調優

檢查使用者的指令和官方提供的指令是否完全一緻,避免誤操作。

使用 stat 選項看一下檔案的狀态是否是已經解凍了,如果以及解凍再次操作,就會出現 400。

The operation is not valid for the object's state

出現這個問題是因為使用者操作的檔案是一個歸檔的檔案,不能直接操作,需要先進行解凍 restore 的操作後才能使用。

  • ossuti64 restore oss://bucket/prefix/object -I $accesskey -k $secretkey -e $endpoint
  • 遞歸解凍 ossuti64 restore oss://bucket/prefix/ -r -I $accesskey -k $secretkey -e $endpoint

上傳速率不穩定

Windows ossutil 上傳 OSS 速率慢不穩定,用戶端是在河北公網,目标服務端是北京,存在跨省情況;

首先了解下使用者在公網情況下,能否切換到同 region 的 OSS 上進行通路,同 region 的 OSS 内網是有阿裡環網組成,如果客戶隻能在公網使用,進行下面的排查。

性能調優-ossutil 調優

公網情況:

首先看下使用者端 ping OSS 的完整域名的網絡 ping 值是否正常,tracert 是否有延遲抖動,此步驟可以通過腳本來做,下載下傳腳本後運作,直接輸入完整的 OSS 域名即可:

測試腳本

1、腳本中是 ping 的是大包 1460,發現使用者端直接網絡逾時,此時懷疑是客戶的網絡有限制或者網絡擁塞,但是 tracert 通的,再進行下一步排查;

性能調優-ossutil 調優

2、嘗試降低 ping 包的 len 發現到 1412 ping 可以通過,說明用戶端在網絡上做限制,不允許 1460 大包的傳輸,影響了用戶端的上行網絡吞吐量;

性能調優-ossutil 調優

嘗試檢查本機的網絡負載

1、通過本機資源監控看使用者端當時的 CPU 負載和本機記憶體占用較高,實際登陸到用戶端機器上發現系統卡頓,實際資源監控器看到 ossutil 工具線程并沒有跑到和設定的 --job=10 --parallel=10 (10*10=100)一樣,隻是運作了 24 個,說明工具的線程受到了系統 CPU 排程影響,無法将網絡吞吐打上去,于是讓使用者關系了一些占用 CPU 記憶體較高的應用後,ossutil 線程數終于打到 69;

調整前的測試

性能調優-ossutil 調優

調整後的測試

性能調優-ossutil 調優

靈活調整 ossutil 的線程數和分片的并發數;

--bigfile-threshold=52428800 --jobs=10 --parallel=50 --part-size=52428800

1、遇到大檔案數量多,以及單一的大檔案時我們要靈活調整 ossutil 的相關參數能夠提高我們的 ossutil 的效率;

2、比如這個案例中客戶的檔案大小平均是 100M 以上,而且客戶的出口帶寬是共享 200M ,也就是客戶自己的上線速度理論上也要 20M;

3、針對這種情況,我們可以把分片大小調整為 50M-10M,同時增加 parallel 分片的并發數量,盡可能的打滿上行的吞吐。當用戶端 CPU 核心比較少的時候不建議分的太小,比如分到 1M 時就會造成 CPU 切片過快,消耗 CPU 計算,影響系統性能。

4、如果遇到檔案數量單一大檔案,或者小檔案時,可以不用加任何參數,直接上傳即可;調整完成後使用者的上行出口速率能打到 10M 大 B。

對比其他家的工具

比如七牛的 qfetch 以及 qshell 做了性能對比,上行的傳輸效率相差并不多,并沒有使用者回報了七牛 20M (大B)阿裡雲 4M(大B),基本上qshell 和 qfetch 的效果都是穩定在 10M 左右;

總結以及需要解決問題

1、當使用 ossbrower 上傳速度低時可以切換到 ossutil 這個高效的工具進行測試;

2、需要使用者解決下為什麼網絡出口限制的大包(1460) 的傳輸,這個問題不解決很難将網絡帶寬吞吐提上去。

盡量本機不要在負載高的情況下上傳一些大檔案,如果傳輸的話可以關閉一些應用卡頓的程式,或者降低下 ossutil 工具的并發線程數量,不然即使設定了 100 ,但實際受到系統的 CPU 調用影響,不一定能跑到 100 。降低線程數,上傳的效率也會受到影響;

繼續閱讀