如何加速長距離 SFTP 傳輸
調整 SFTP 並行請求數與緩衝區,測試壓縮效果,並找出拖慢長距離安全檔案傳輸的儲存或網路限制。
同一套 SFTP 在區網傳得快、跨國卻無法使用大部分頻寬時,可以先檢查用戶端同時處理的讀寫請求與緩衝區。高往返時間會放大等待,但 CPU、磁碟或伺服器限速也可能造成相似現象。
以下用 OpenSSH 示範如何建立基準,再分別測試請求並行度、緩衝區與壓縮。每次只改一項,記錄整項工作的耗時,才能判斷設定是否有效;其他用戶端的選項名稱可能不同。
SFTP 是什麼,又不是什麼
SFTP 是在加密 SSH 傳輸層上執行檔案操作的傳輸程式。OpenSSH 的官方 sftp 手冊記載了公開金鑰驗證、壓縮、遞迴複製、續傳、請求深度與傳輸緩衝區。
SFTP 不是「安全版 FTP」。傳統 FTP 使用一條控制連線,以及另一條傳送檔案內容的資料連線。RFC 959定義了這項架構,以及串流 mode 在檔案結束時關閉資料連線造成的連線管理問題。SFTP 改用 SSH 的加密連線與通道流量控制。RFC 4254則定義 SSH 通道視窗與最大封包大小,決定寄件端在等待調整前能搬多少資料。
FTP 與 SFTP 都可能因距離而變慢,但設定與失敗原因不同。
調校前要量測的五個上限
| 上限 | 要記錄什麼 | 常見訊號 |
|---|---|---|
| 網路路徑 | RTT、封包遺失、抖動、可用頻寬 | 速率依路由或時段而變 |
| SFTP 請求處理流程 | 尚未完成的請求與緩衝區大小 | CPU 與磁碟都很閒,但線路利用率低 |
| 加密 CPU | 傳輸中的用戶端與伺服器 CPU | 連線尚未用滿,單一核心先飽和 |
| 儲存 | 來源讀取、目的端寫入與 IOPS | 大檔快,但建立小檔時停滯 |
| 伺服器政策 | 頻寬、工作階段、請求或儲存配額 | 用戶端調整不再改變結果 |
至少測一個大檔與一個代表性資料夾。單一大檔能隔離串流路徑,資料夾則會顯示中繼資料、目錄遍歷、建立與開關檔、逐檔協調等成本。檔案數模型請見大量小檔案為什麼傳得慢。
如果現在用的是 SSH 上的 rsync,而不是互動式 SFTP,請改用WAN 上 rsync 過慢的調校指南;rsync 的檔案清單、快速檢查與差分傳輸決策需要不同診斷順序。
1. 謹慎增加尚未完成的請求
OpenSSH sftp 可用 -R num_requests 或 -X nrequests=value 控制同時進行的讀寫請求。文件列出的預設值是 64 個請求,提高數值可能增加速度,但也會增加記憶體用量。
不要直接跳到極端值,應逐步測試:
sftp -R 64 user@example.com
sftp -R 128 user@example.com
sftp -R 256 user@example.com
每一輪都使用相同檔案、路由、用戶端與伺服器。吞吐量不再上升、記憶體不可接受,或伺服器變得不穩時就停止。更多請求不會創造頻寬,只能在請求延遲是瓶頸時減少等待。
2. 測試較大的傳輸緩衝區
OpenSSH 文件記載 SFTP 緩衝區預設為 32 KB。-B buffer_size 或 -X buffer=value 可以變更一次讀寫操作使用的最大緩衝區。緩衝區越大,同一有效資料需要的往返次數越少,但會增加記憶體用量。
sftp -B 65536 user@example.com
sftp -B 131072 user@example.com
不存在通用的最佳值。用戶端版本、伺服器上限、SSH 通道視窗、記憶體與路徑行為都會影響結果。先保留預設請求數只改緩衝區,再分開測請求深度,才能知道改善來自哪個變數。
3. 把壓縮當成檔案型態測試
OpenSSH 使用 -C 開啟 SFTP 壓縮,並把 SSH 壓縮設定套到工作階段。OpenSSH 用戶端設定手冊指出壓縮預設關閉,且會套用到整條 SSH 連線的流量。
頻寬不足且 CPU 有餘裕時,紀錄、原始碼、CSV 或未壓縮文字可能受益。JPEG、MP4、ZIP 等已壓縮資料通常幫助很小,卻仍會消耗 CPU。請比較:
sftp user@example.com
sftp -C user@example.com
如果壓縮降低速度,或 CPU 增幅大於減少的傳送位元組,就保持關閉。
4. 重用工作階段並批次處理相關工作
重複驗證與建立工作階段會增加固定成本。排程工作可用 OpenSSH 的 -b batchfile,搭配適當的非互動驗證,在一條工作階段內執行多個 SFTP 命令。
大量小檔即使留在同一工作階段,檔案系統與逐檔工作仍可能占大多數時間。建立壓縮檔可以把資料夾轉為連續串流,但會增加壓縮檔建立、暫存空間、解壓縮與整包續傳的成本。固定工作流程應比較能保留檔案邊界並自動批次封裝的傳輸引擎。
5. 檢查 CPU、儲存與伺服器限制
若請求與緩衝區沒有效果,瓶頸可能不在 SFTP 處理流程。
- **CPU:**兩端都要執行加密與完整性處理。記錄每個核心,而不只總 CPU。
- **儲存:**建立小檔可能耗盡目的端 IOPS,網路則維持低利用率。
- **網路丟包:**SSH 與 SFTP 通常跑在 TCP 上,丟包和重傳會降低傳送率。
- **限速:**確認 SFTP 伺服器、帳號、閘道與上游連線沒有設限。
- **額外跳躍:**跳板主機會增加一段路徑,也可能成為上限。
不要為了基準數字而弱化主機金鑰驗證、使用過時加密或停用完整性控制。調校必須保留當初選擇 SFTP 的安全特性。
可重複的 SFTP 基準測試
- 準備一個大檔與一個實際資料夾,每輪使用相同內容。
- 記錄用戶端與伺服器版本、硬體、儲存、路由、RTT、封包遺失和目前選項。
- 測量完整總耗時,不只看進度列峰值。
- 預設設定至少執行三次並採中位數。
- 變更請求深度、重測,保留最穩定的最佳值。
- 變更緩衝區、重測,保留最穩定的最佳值。
- 用真實檔案型態比較壓縮開與關。
- 中斷非正式環境傳輸,確認續傳與最終完整性。
有效資料時間下限可用1TB 傳輸時間計算器,路由設計與協定選擇請看長距離高速檔案傳輸指南。
何時調校 SFTP 就夠,何時該比較替代方案
如果 SFTP 能達到必要完成時間、符合既有自動化,也符合安全與存取模型,就繼續使用。它仍是普及且容易腳本化的選擇。
比較目前版本時,使用相同檔案、路線、儲存裝置與安全設定,分開記錄傳輸階段速度及取得驗證後檔案的完整交付時間。WarpSend 與 FTP 測試方法說明如何進行比較;FTP 結果也不能代表 SFTP 或 Aspera 的效能。
WarpSend 不會取代 SFTP 伺服器需求,也沒有實作 SFTP。它是給能安裝受支援端點,並需要直接傳輸、瀏覽器分享連結或代管資料夾同步的團隊使用的另一種流程。請先看 WarpDirect,再用 SFTP 基準的同一組檔案免費測試 WarpSend。
常見問題
為什麼 SFTP 在長距離連線上很慢?
常見限制包括往返延遲、封包遺失、保守的請求與緩衝區設定、SSH 加密的 CPU 成本,以及來源或目的端儲存。高速接取線路不會消除這些上限。請用同一組檔案測試,同時記錄 RTT、封包遺失、CPU、儲存吞吐量與完整耗時。
哪些 OpenSSH SFTP 設定可以改善速度?
OpenSSH 可用 -R 或 -X nrequests 控制尚未完成的請求數,用 -B 或 -X buffer控制每次請求的緩衝區。較大的值可減少高延遲路徑上的等待,但會使用更多記憶體;若瓶頸是 CPU、儲存、丟包或伺服器限制,則不會改善。一次只改一個設定再重測。
應該開啟 SFTP 壓縮嗎?
請實測,不要預設一定有幫助。頻寬受限而資料是可壓縮文字時可能有效,但壓縮會消耗 CPU,對 JPEG、MP4、ZIP 等已壓縮格式通常幫助很小。OpenSSH 預設關閉壓縮。
SFTP 和 FTPS 一樣嗎?
不一樣。SFTP 在加密的 SSH 傳輸層上執行檔案操作;FTPS 是受 TLS 保護的 FTP,仍保留 FTP 的控制與資料連線架構。兩者的用戶端、連接埠、驗證、防火牆行為與效能調整都不同。